濕度傳感器開發用的是tcp或者udp通信
/// <summary> /// 發送信息 /// </summary> /// <param name="obj"></param> private void SendMessage(object obj) { string message = (string)obj; //00 B0 D0 2A B7 3C FF 03 00 00 00 06 byte[] mybyte = new byte[12]; mybyte[0] = 0x00; mybyte[1] = 0xB0; mybyte[2] = 0xD0; mybyte[3] = 0x2A; mybyte[4] = 0xB7; mybyte[5] = 0x3C; mybyte[6] = 0xFF; mybyte[7] = 0x03; mybyte[8] = 0x00; mybyte[9] = 0x00; mybyte[10] = 0x00; mybyte[11] = 0x06; IPEndPoint remoteIpep = new IPEndPoint( IPAddress.Parse(ConfigurationManager.AppSettings["IP"]), Int32.Parse(ConfigurationManager.AppSettings["Port"])); // 發送到的IP地址和目標端口號 udpcSend.Send(mybyte, mybyte.Length, remoteIpep); udpcSend.Close(); } private void sendMessage() { // 實名發送 try { IPEndPoint localIpep = new IPEndPoint( IPAddress.Parse(ip), Int32.Parse(ConfigurationManager.AppSettings["CurrentPort"])); // 本機IP,本機端口號 udpcSend = new UdpClient(localIpep); Thread thrSend = new Thread(SendMessage); thrSend.Start(); } catch { } }
/// <summary> /// 開關:在監聽UDP報文階段為true,否則為false /// </summary> bool IsUdpcRecvStart = false; /// <summary> /// 線程:不斷監聽UDP報文 /// </summary> Thread thrRecv; /// <summary> /// 線程:監聽是否停止工作 /// </summary> Thread thrWork; /// <summary> /// 按鈕:接收數據開關 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnRecv() { if (!IsUdpcRecvStart) // 未監聽的情況,開始監聽 { IPEndPoint localIpep = new IPEndPoint(IPAddress.Any, Int32.Parse(ConfigurationManager.AppSettings["CurrentPort"])); // 本機IP和監聽端口號 udpcRecv = new UdpClient(localIpep); thrRecv = new Thread(ReceiveMessage); thrRecv.Start(); IsUdpcRecvStart = true; Trace.Write("UDP監聽器已成功啟動"); this.tbOut.AppendText("UDP監聽器已成功啟動"+"\n"); } else // 正在監聽的情況,終止監聽 { //thrRecv.Abort(); // 必須先關閉這個線程,否則會異常 //udpcRecv.Close(); //IsUdpcRecvStart = false; //Trace.Write("UDP監聽器已成功關閉"); } } public static string byteToHexStr(byte[] bytes) { string returnStr = ""; if (bytes != null) { for (int i = 0; i < bytes.Length; i++) { returnStr += bytes[i].ToString("X2"); } } return returnStr; } /// <summary> /// 接收數據 /// </summary> /// <param name="obj"></param> private void ReceiveMessage(object obj) { IPEndPoint remoteIpep = new IPEndPoint(IPAddress.Any, 0); while (isOpen) { try { byte[] bytRecv = udpcRecv.Receive(ref remoteIpep); dealData(bytRecv); string message = byteToHexStr(bytRecv); status = GetStatus.SUCCESS; //FileUtils.SaveFile("\\log\\logData.txt", message); //Trace.Write(message+"\n"); //this.tbOut.AppendText(message); } catch (Exception ex) { Trace.Write(ex.Message); break; } } } |