2011-05-31 47 views
6

是什麼力量讓一個TcpClient的自動重新連接到服務器時 它斷開連接(例如,通過服務器本身)的最好方法?TcpClient的自動重新連接

我目前使用的代碼是:

public void ClientWork() 
{ 
     TcpClient client = new TcpClient(); 

     try 
     { 
      try 
      { 
       client.Connect(ip, port); 
      } 
      catch(Exception ex) 
      { 
       logger.ErrorFormat("client.Connect: {0}", ex.Message); 
       return false; 
      } 

      NetworkStream ns = client.GetStream(); 
      byte[] buff; 

      while (__bRunning) 
      { 
       buff = new byte[1000]; 
       ns.Read(buff, 0, 1000); 

       string line = System.Text.Encoding.Default.GetString(buff); 
      } 

      //ns.Close(); 
      client.Close(); 
     } 
     catch(Exception e) 
     { 
      //Reconnect? 
      client.Close(); 
      client = null; 

      return false; 
     } 
} 

我使用C#.NET

回答

1

沒有可拿到通知連接中斷事件。

可能有2種可能的解決方案。

  1. 投票。你有單獨的線程,試圖在不同的線程中持續地輪詢套接字。請參考Instantly detect client disconnection from server socket

  2. 如果您對套接字或使用套接字的接口進行低級別控制,則可以嘗試try..catch讀取和寫入方法,或try..catch讀取和寫入方法的包裝,是您可以重新連接並嘗試讀取和寫入的任何異常。

+0

在客戶端查詢? – Kai 2011-05-31 12:42:07

+0

是的。應該在客戶端使用當前套接字進行輪詢 – 2011-05-31 12:47:25

+0

對於我打開的每個連接都意味着我開始一個線程,每5秒檢查一次連接是否仍然可用? – Kai 2011-05-31 12:55:54