歡迎您的來訪!有源碼,好建站(m.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://m.bmm520.net/info/net/2021/0711/22471.html

      推薦資訊

      亚洲heyzo专区无码综合| 亚洲熟妇无码AV不卡在线播放 | ASS亚洲熟妇毛茸茸PICS| 亚洲av日韩精品久久久久久a| 亚洲一区在线观看视频| 亚洲无成人网77777| 亚洲午夜电影在线观看| 亚洲精品国产免费| 亚洲国产成人资源在线软件 | 亚洲区小说区图片区| 亚洲精品国产高清不卡在线| 亚洲日本韩国在线| 国产精品亚洲视频| 亚洲欧洲日产国码高潮αv| 国产乱辈通伦影片在线播放亚洲| 国产国拍亚洲精品福利| 亚洲欧洲美洲无码精品VA| 亚洲成av人影院| 亚洲午夜精品一区二区| 亚洲视频在线观看免费视频| 亚洲国产日产无码精品| 亚洲久悠悠色悠在线播放| 亚洲欧美日韩中文字幕一区二区三区| 亚洲人成无码网站在线观看| jizzjizz亚洲日本少妇| 亚洲精品国产高清嫩草影院| 伊人久久亚洲综合| 久热综合在线亚洲精品| 亚洲自偷自拍另类图片二区| 亚洲一区二区三区精品视频| 亚洲日韩av无码中文| 五月婷婷亚洲综合| 亚洲人成人无码网www国产| 亚洲精品国产成人片| 久久久久亚洲Av无码专| 色偷偷女男人的天堂亚洲网| 日韩欧美亚洲国产精品字幕久久久 | 亚洲欧洲日产国码无码网站| 亚洲一区综合在线播放| www.亚洲成在线| 另类专区另类专区亚洲|