2014-10-01 70 views
0

我有自動希望儘快重新連接網絡斷開連接,然後重新連接TcpClient的,但我沒有得到如何實現呢..如何儘快重新連接的TcpClient爲斷開網絡連接,然後插入

這裏是我的功能..

private void Conn() 
    { 

      try 
      { 
       client = new TcpClient(); 

       client.Connect(new IPEndPoint(IPAddress.Parse(ip), intport)); 
       //Say thread to sleep for 1 secs. 
       Thread.Sleep(1000); 
      } 
      catch (Exception ex) 
      { 
       // Log the error here. 
       client.Close(); 
      } 

      try 
      { 
       using (NetworkStream stream = client.GetStream()) 
       { 
        byte[] notify = Encoding.ASCII.GetBytes("Hello"); 
        stream.Write(notify, 0, notify.Length); 
       } 
       byte[] data = new byte[1024]; 
        while (true) 
        { 
         { 
          int numBytesRead = stream.Read(data, 0, data.Length); 
          if (numBytesRead > 0) 
          { 
           data= Encoding.ASCII.GetString(data, 0, numBytesRead); 
          } 
         } 
        } 
       } 
      catch{Exception ex} 

while (true)還怎麼可靠擺脫TCPIP的machine.Till連續數據我自動測試這個代碼從響應或一段時間後,獲取數據退出。 請幫我獲取不間斷的數據。 謝謝..

+0

我認爲你應該做的是檢查client.Connected,如果它返回false做再次連接 – Nokdu 2014-10-01 06:23:12

+1

@Nokdu不,這不是方式。我檢查了它,它不可靠.. – 2014-10-01 06:25:03

回答

2

在寫完東西之後,您立即處置了NetworkStream。這關閉了插座。不要這樣做。相反,將TcpClient置於using聲明中。

您讀取數據的方式完全正確。當Read返回0時,循環將退出,這表示遠程端正常關閉連接。如果這是意想不到的,問題在於遠端。

只抓住SocketException並檢查狀態碼屬性以找出確切的錯誤。

無法可靠地檢測網絡錯誤。您必須等待異常才能注意到連接失敗。之後,您需要定期嘗試再次建立連接,以確定網絡何時再次可用。

我相信Windows提供了一些網絡接口級別的事件來檢測不插電纜,但那些是不可靠的。

相關問題