2011-05-31 448 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