歡迎您的來訪!有源碼,好建站(m.bmm520.net)源碼海洋源碼網(wǎng)為您提供快速建站平臺.

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

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

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

       
      我是先從數(shù)據(jù)庫讀取數(shù)據(jù),對數(shù)據(jù)封裝傳到后端,讀數(shù)據(jù)的時候用一個List存放數(shù)據(jù)庫的雷達設備名稱,
      /// <summary>
          /// 根據(jù)設備建立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;
       
           以上代碼實現(xiàn)建立很多個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判斷,不存在就關閉連接,重新建連接寫到字典里面。數(shù)據(jù)處理部門就對字典遍歷選取設備號對應的socket連接。項目里面我做了個定時300ms查詢一次連接是否還在定時器任務。代碼如下
      public void ConnectStateTiming()
      {
      System.Timers.Timer timer = new System.Timers.Timer();
      timer.Enabled = true;
      timer.Interval = 300;//執(zhí)行間隔時間,單位為毫秒
      timer.Start();
      timer.Elapsed += new System.Timers.ElapsedEventHandler(FlashConnectState);
      }
       
      (責任編輯:admin)本文地址:http://m.bmm520.net/info/net/2021/0711/22471.html

      推薦資訊

      国产成人亚洲综合色影视| 亚洲色大成网站www| 亚洲色偷偷综合亚洲av78| 亚洲人妖女同在线播放| 亚洲黄色免费网站| 亚洲国产一区二区a毛片| 亚洲国产综合91精品麻豆| 在线精品亚洲一区二区三区| 亚洲午夜激情视频| MM131亚洲国产美女久久| 亚洲人成网站在线观看青青| 亚洲日本中文字幕一区二区三区| 国产亚洲午夜精品| 亚洲男人天堂2020| 丁香五月亚洲综合深深爱| 亚洲一区二区三区在线观看精品中文 | 自拍偷自拍亚洲精品播放| 亚洲AV无码资源在线观看| 精品亚洲成A人在线观看青青| 亚洲人av高清无码| 精品国产日韩亚洲一区在线| 国产精品亚洲а∨天堂2021 | 国产亚洲综合视频| 亚洲欧洲日本在线| 国产V亚洲V天堂无码| 亚洲av鲁丝一区二区三区| 精品亚洲麻豆1区2区3区| 亚洲日产2021三区| 亚洲国产系列一区二区三区| 亚洲精品又粗又大又爽A片| 九九精品国产亚洲AV日韩| 亚洲第一区在线观看| 亚洲一级特黄无码片| 国产亚洲一区二区精品| 亚洲资源在线观看| 亚洲影视自拍揄拍愉拍| 久久亚洲中文无码咪咪爱| 亚洲人成网站18禁止一区| 久久精品7亚洲午夜a| 亚洲白嫩在线观看| 亚洲欧美日韩中文无线码|