1. 程式人生 > 其它 >基於Socket 實現.net服務作為服務端進行資訊接收

基於Socket 實現.net服務作為服務端進行資訊接收

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、測試工具效果如圖