基於Socket 實現.net服務作為服務端進行資訊接收
阿新 • • 發佈:2022-05-19
1、繫結本機的IP和埠實現資訊接收
IPEndPoint ipep = new IPEndPoint(IPAddress.Parse("192.168.1.10"), 10001);//本機預使用的IP和埠 LogHelper.Instance.AddErrorLogs("本機ip" + ipep); Socket newsock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); newsock.Bind(ipep);//繫結 LogHelper.Instance.AddErrorLogs("繫結成功"); newsock.Listen(10);//監聽 LogHelper.Instance.AddErrorLogs("開始監聽"); Thread thread = new Thread(DoWork); thread.Start(newsock);
2、開始工作
public void DoWork(object newsock) {while (true) { try { Socket client = ((Socket)newsock).Accept();//當有可用的客戶端連線嘗試時執行,並返回一個新的socket,用於與客戶端之間的通訊 IPEndPoint clientip = (IPEndPoint)client.RemoteEndPoint; LogHelper.Instance.AddErrorLogs("通訊ip" + clientip); Thread th2 = new Thread(Rec); th2.Start(client); } catch (Exception ex) { ((Socket)newsock).Close(); ((Socket)newsock).Disconnect(true); ((Socket)newsock).ReceiveTimeout = 60000; ((Socket)newsock).Blocking = true; LogHelper.Instance.AddErrorLogs("錯誤資訊1" + ex.ToString()); downloaddRun = false; break; } } }
3、進行訊息的接收,並進行資料入庫
//不斷接收訊息 private void Rec(object client) { while (true) { try { T_MON_QIXIANGJIANCEEntity t_mon_qx = new T_MON_QIXIANGJIANCEEntity(); byte[] data = new byte[1024]; int recv = ((Socket)client).Receive(data); //說明客戶端下線了 if (recv == 0) { break; } LogHelper.Instance.AddErrorLogs("recv=" + recv); string strDatas = ""; string stringdata = Encoding.GetEncoding("GB2312").GetString(data, 0, recv);
//stringdata就是接收到訊息 strDatas = stringdata; //下面是資料入庫操作 if (strDatas.Trim().Substring(strDatas.Length - 2).ToUpper() == "GG" && strDatas.Trim().Substring(0, 1) == "#") { LogHelper.Instance.writeLogs("監測資料:" + strDatas, "data"); t_mon_qx = Deserialize(strDatas, "123", "XX氣象站"); string strSql = DataCore.GetInsertSQL(t_mon_qx, mQxTVData, mQxTVData.ObjectName); int count = mDbHelper.ExecuteSql(strSql); LogHelper.Instance.writeLogs("sql:" + strSql, "sql"); strDatas = ""; } } catch (Exception ex) { ((Socket)client).Close(); ((Socket)client).Disconnect(true); ((Socket)client).ReceiveTimeout = 60000; ((Socket)client).Blocking = true; LogHelper.Instance.AddErrorLogs("錯誤資訊2" + ex.ToString()); downloaddRun = false; break; } } }
4、測試工具在https://download.csdn.net/download/duangufei/85415583
5、測試工具效果如圖