歡迎您的來訪!有源碼,好建站(www.bmm520.net)源碼海洋源碼網為您提供快速建站平臺.
      當前位置: 首頁 > 行業資訊 > c# .net 資料 >

      C#使用TCPClient客戶端斷線重連服務器

      時間:2021-07-11 23:33來源:未知 作者:admin 點擊:
      最近做模擬雷達推送數據的項目,用一個軟件模擬幾百臺雷達往后端推送數據,數據處理的代碼我就不貼了,主要是建立socket連接和斷線重連部分的代碼。主要是針對服務端斷開連接后,客戶端這邊要重現服務器。 我是先從數據庫讀取數據,對數據封裝傳到后端,讀數

       最近做模擬雷達推送數據的項目,用一個軟件模擬幾百臺雷達往后端推送數據,數據處理的代碼我就不貼了,主要是建立socket連接和斷線重連部分的代碼。主要是針對服務端斷開連接后,客戶端這邊要重現服務器。

       
      我是先從數據庫讀取數據,對數據封裝傳到后端,讀數據的時候用一個List存放數據庫的雷達設備名稱,
      /// <summary>
          /// 根據設備建立socket連接
          /// </summary>       
          public static void DeviSocketDic()
          {
              for(int i = 0; i < Settings.DeviceNumList.Count; i++)
              {
                  TcpClient tcp = Connect();
                  if (!DeviceSocket.ContainsKey(Settings.DeviceNumList[i]))
                  {                    
                      DeviceSocket.Add(Settings.DeviceNumList[i], tcp);
                      IPEndPoint localIEP = (IPEndPoint)tcp.Client.LocalEndPoint;
                      PortList.Add(localIEP.Port.ToString());
                  }                    
              }
          }
           /// <summary>
          /// TCP連接
          /// </summary>
          /// <returns></returns>
          public static TcpClient Connect()
          {
              try
              {
                  tcpc = new TcpClient();
                  tcpc.Connect(ip, int.Parse(port));//連接到服務   
                 
              }
              catch (Exception)
              {
                  return null;
              }
              return tcpc;
          }
           public static Dictionary<string, TcpClient> DeviceSocket = new Dictionary<string, TcpClient>();
           public static List<string> DeviceNumList = new List<string>();
           private static TcpClient tcpc = null;
           public static string ip = string.Empty;
           public static string port = string.Empty;
       
           以上代碼實現建立很多個socket連接存放到字典里面,變量定義我放在代碼后面了。
       
            foreach (KeyValuePair<string, TcpClient> item in HTTPServer.DeviceSocket)
                  {                   
                          if (item.Value.Client.Poll(20, SelectMode.SelectRead) && item.Value.Client.Available == 0)                       
                          {                            
                              item.Value.Close();                            
                              HTTPServer.DeviceSocket[item.Key] = HTTPServer.Connect();                        
                          }                                                              
                  }
      上面對字典遍歷的代碼我刪掉了一些,對控件判斷和顯示的部分,主要的就在這里面了,if對socket判斷,不存在就關閉連接,重新建連接寫到字典里面。數據處理部門就對字典遍歷選取設備號對應的socket連接。項目里面我做了個定時300ms查詢一次連接是否還在定時器任務。代碼如下
      public void ConnectStateTiming()
      {
      System.Timers.Timer timer = new System.Timers.Timer();
      timer.Enabled = true;
      timer.Interval = 300;//執行間隔時間,單位為毫秒
      timer.Start();
      timer.Elapsed += new System.Timers.ElapsedEventHandler(FlashConnectState);
      }
       
      (責任編輯:admin)本文地址:http://www.bmm520.net/info/net/2021/0711/22471.html

      推薦資訊

      亚洲国产精品丝袜在线观看| 亚洲www77777| 久久91亚洲精品中文字幕| 亚洲av无码专区国产不乱码 | 亚洲综合成人网在线观看| 亚洲Av无码国产一区二区| 亚洲日韩一区二区三区| 日本亚洲精品色婷婷在线影院| 亚洲欧洲春色校园另类小说| 亚洲一区二区成人| 久久精品国产亚洲av影院| 亚洲激情中文字幕| 久久精品国产亚洲av麻豆色欲| 亚洲AV无码久久精品成人| 亚洲国产精品VA在线看黑人 | 亚洲片一区二区三区| 亚洲国产日韩在线观频| 亚洲国产精品激情在线观看| 最新亚洲人成网站在线观看| 在线观看免费亚洲| 亚洲国产精品一区二区第四页 | 亚洲日本在线播放| 亚洲人成7777| 亚洲精品无码人妻无码| 亚洲午夜无码久久久久软件| 亚洲爆乳精品无码一区二区| 久久精品国产亚洲av品善| 午夜亚洲av永久无码精品| 亚洲精品无码久久久| 4338×亚洲全国最大色成网站| 久久久青草青青国产亚洲免观 | 亚洲情综合五月天| 亚洲AV人无码激艳猛片| 亚洲色av性色在线观无码| 亚洲国产成人精品无码区在线秒播 | 亚洲成熟xxxxx电影| 亚洲老熟女@TubeumTV| 亚洲AV无码国产精品色| 亚洲成AV人片在WWW| 亚洲国产精品第一区二区三区| 中文亚洲成a人片在线观看|