嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300
本次赞助数额为: 4 元微信扫码支付:4 元
请留下您的邮箱,我们将在2小时内将文件发到您的邮箱
实时获取下位机中草药种植环境传感器上传数据包与摄像头拍摄的图片,验证后将其转存至服务器数据库中
private static byte[] result = new byte[1024];
private static byte[] result2 = new byte[1024];
private static byte[] Picdata = new byte[1024];
private static byte[] PhByte = new byte[13000];
private static byte[] Sendbyte = new byte[5];
byte[] sendData = new byte[9];
int p = 1 ,s = 1;
int CFPD1 = 00;
int CFPD2 = 00;
int P_P = 0;
int datasum=13;
int Sum;
static Socket serverSocket;
static Socket APPSocket;
static Socket PicSocket;
//数据库属性
SqlConnection conn = new SqlConnection("server=localhost;database=Soil Environmental;uid=soil;pwd=1111");
DataSet ds;
SqlDataAdapter sda;
int ZhanDian=0;
public Form1()
{
// SqlConnection conn = new SqlConnection("server=" PICwin.HostName.Text"localhost;database=Soil Environmental;uid=soil;pwd=1111");
InitializeComponent();
string IPID = "101.200.210.193";
int DPJProt = 0606;
int APPProt = 0607;
int PicProt = 0608;
//服务器IP地址
IPAddress ip = IPAddress.Parse(IPID);
serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//创建一个socket
serverSocket.Bind(new IPEndPoint(ip, DPJProt)); //绑定IP地址:端口
serverSocket.Listen(10); //设定最多10个排队连接请求
// Console.WriteLine("启动监听{0}成功", serverSocket.LocalEndPoint.ToString());
this.SystemInfo.AppendText("启动监听成功,来自地址\n" serverSocket.LocalEndPoint.ToString() "\n\n");
//通过Clientsoket发送数据
APPSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
APPSocket.Bind(new IPEndPoint(ip, APPProt)); //绑定IP地址:端口
APPSocket.Listen(10); //设定最多10个排队连接请求
PicSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
PicSocket.Bind(new IPEndPoint(ip, PicProt)); //绑定IP地址:端口
PicSocket.Listen(0); //设定最多10个排队连接请求
//2
Thread DPJThread = new Thread(ListenClientConnect);
DPJThread.Start();
Thread APPthread = new Thread(SenderConnect);
APPthread.Start();
// Console.ReadLine();
Thread Picthread = new Thread(PicRecv);
Picthread.Start();
}
private void PicRecv()
{
while (true)
{
Socket PICSocket = PicSocket.Accept();
Thread PicThread = new Thread(PicRECV);
PicThread.Start(PICSocket);
}
}
private void SenderConnect()
{
while (true)
{
Socket SenderSocket = APPSocket.Accept();
Thread SenderThread = new Thread(SendMessage);
SenderThread.Start(SenderSocket);
}
}
private void ListenClientConnect()
{
while (true)
{
Socket clientSocket = serverSocket.Accept();
Thread receiveThread = new Thread(ReceiveMessage);
receiveThread.Start(clientSocket);
}
}
//预先定义各个数据的全局存储变量,方便后面数据库的存储调用。
float TRWD;
float TRSF;
float PH;
float GZ;
float KQWD;
float KQSD;
float DQY;
float EC;
// bool MSR = false;
// Image img;
//int i = 0;
public void PicRECV(object picSocket)
{
Socket PicSocket = (Socket)picSocket;
// PICwin = new windowsPIC();
while (true)
{
try
{
PicSocket.Receive(Picdata);
this.SystemInfo.AppendText("———————————————\n");
this.SystemInfo.AppendText("收到图片,来自地址" PicSocket.RemoteEndPoint.ToString() System.Environment.NewLine);
this.SystemInfo.AppendText("接收时间:" DateTime.Now.ToString() "\n");
this.SystemInfo.AppendText("重复判断位:CFPD1:" CFPD1.ToString("X2") " CFPD2:" CFPD2.ToString("X2") "\n");
//this.SystemInfo.AppendText("数据包编号:" p "\n");
p = Convert.ToInt32(Picdata[1]);
this.SystemInfo.AppendText("数据包编号p:" p " 数据包验证码P_P:" P_P "\n");
if (Convert.ToInt32(Picdata[0].ToString("X2")) == 76 && (Picdata[5] != CFPD1 && Picdata[6] != CFPD2)&&(p!=P_P))
{
Sendbyte[0] = 0xFE;
Sendbyte[1] = 0x01;
Sendbyte[2] = Picdata[5];
Sendbyte[3] = Picdata[6];
Sendbyte[4] = 0xFC;
this.SystemInfo.AppendText("成功通过数据包验证!\n");
if (p == 1)
{
string sumH2= Picdata[3].ToString("X2");
string sumL2= Picdata[4].ToString("X2");
string sum ="0x" sumH2 sumL2;
this.SystemInfo.AppendText("\n 数据包总数合并后的字符串为:" sum "\n");
Sum = Convert.ToInt32(sum, 16);
this.SystemInfo.AppendText("字符串转化值为:" Sum "\n");
datasum = (Sum / 1000) 1;
this.SystemInfo.AppendText("数据包总数为:" datasum "\n");
}
if (p < datasum && p>=1)
{
for (int k = 0; k < 1000; k )
{
PhByte[k s - 1] = Picdata[k 5];
}
s = s 1000;
}
if (p == datasum)
{
Convert.ToInt32(Picdata[999].ToString("D3")); //Picdata数据位待定
int a = Sum -1000*(datasum-1);
this.SystemInfo.AppendText("末尾数据包长度为:" a "\n");
for (int k = 0; k < a; k )
{
PhByte[k s - 1] = Picdata[k 5];
}
string Filename = "D:\\土壤项目\\图片库\\CeShi" DateTime.Now.ToString("yyyy年MM月dd日HH时mm分ss秒") ".jpg";
CreateImageFromBytes(Filename, PhByte);
string Picfile = CreateImageFromBytes(Filename, PhByte);
this.SystemInfo.AppendText("\n 生成图片 \n");
this.SystemInfo.AppendText("照片路径:" Picfile "\n\n");
//p = 1;
s = 1;
PhByte.Initialize();
if (conn.State == ConnectionState.Open)
//&& ZDTime==true
{
SqlCommand Piccmd = new SqlCommand();
Piccmd.Connection = conn;
Piccmd.CommandText = "INSERT INTO PictureIndex([site],[PicIndex],[Time]) VALUES('" ZhanDian "','" Picfile "','" DateTime.Now.ToString() "')";
Piccmd.CommandType = CommandType.Text;
int i = Convert.ToInt32(Piccmd.ExecuteNonQuery());
this.SystemInfo.AppendText("图片表新增" i.ToString() "条记录" "\n");
// ZDTime = false;
}
else
{
this.SystemInfo.AppendText("数据未连接。" "\n");
// break;
}
}
this.SystemInfo.AppendText("成功接收图片数据包: " p " " DateTime.Now.ToString() " \n");
//this.SystemInfo.AppendText("5,6位编号:" Picdata[5].ToString("X2") " " Picdata[6].ToString("X2") "\n\n");
//p ;
//Thread.Sleep(100);
//if (p == datasum)
//{
// // img = BytesToImage(PhByte);
// //i ;
//}
CFPD1 = Convert.ToInt32(Picdata[5]);
CFPD2 = Convert.ToInt32(Picdata[6]);
P_P = p;
p = 1;
}
else if (Convert.ToInt32(Picdata[0].ToString("X2")) != 76 )
{
Sendbyte[0] = 0xFE;
Sendbyte[1] = 0x02;
Sendbyte[2] = 0x00;
Sendbyte[3] = 0x00;
Sendbyte[4] = 0xFC;
this.SystemInfo.AppendText("图片数据包: " p " 错误" DateTime.Now.ToString() "\n");
this.SystemInfo.AppendText("包头是:" Picdata[0].ToString("X2") "\n");
this.SystemInfo.AppendText("5,6位编号:" Picdata[5].ToString("X2") " " Picdata[6].ToString("X2") "\n");
}
//string ip = myClientSocket.RemoteEndPoint.ToString();
PicSocket.Send(Sendbyte, 0, 5, SocketFlags.None);
this.SystemInfo.AppendText("发送内容是:");
for (int i = 0; i < 5; i )
{
this.SystemInfo.AppendText(Sendbyte[i].ToString("X2") " ");
}
this.SystemInfo.AppendText("\n\n");
Sendbyte.Initialize();
Picdata.Initialize();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
PicSocket.Shutdown(SocketShutdown.Both);
PicSocket.Close();
break;
}
}