2013-07-03 25 views
0

我有一個連接到服務器套接字應用程序客戶端,我有當發生斷線檢測功能:C#插座 - 如何檢測如果我的客戶已經失去了連接

public static class SocketExtensions 
{ 
    public static bool IsConnected(this Socket socket) 
    { 
     try 
     { 
      return !(socket.Poll(1, SelectMode.SelectRead) && socket.Available == 0); 
     } 
     catch (Exception ex) 
     { 
      Trace.Exception(ex, true); 
      return false; 
     } 
    } 
} 

但有時這個功能沒有檢測到斷開和我保持發送數據包,但在服務器不確實響應(每5秒發送我輪詢消息):

12:04.40.079 ; polling ================> 3|11111 ; 
12:04.45.087 ; polling ================> 3|11111 ; 
12:04.50.094 ; polling ================> 3|11111 ; 
12:04.55.102 ; polling ================> 3|11111 ; 
12:05.00.109 ; polling ================> 3|11111 ; 

通常,我發送消息並接收另一:

12:11.03.730 ; polling ================> 3|11111 ; 
12:11.03.746 ; received <================ 4|11111 ; 

我必須關閉並再次運行我的應用程序以再次建立通信。

如何檢測我是否失去與服務器的連接?

任何人都可以幫助我嗎?

在此先感謝!

+0

我認爲你想要的單詞是「輪詢」而不是「共享」。 –

回答

0

發送保持活動數據包以檢測您是否丟失了與服務器的連接,如果您向服務器發送數據包但不從服務器接收到並不意味着您已丟失連接的數據包,檢查服務器端是否存在另一個錯誤或客戶端是否存在錯誤,調試服務器以查看是否收到來自客戶端的數據包,如果您從客戶端收到數據包,則連接不會丟失,但它仍然存在。

+0

你說得對,問題是我無法調試服務器,是另一個系統。 有沒有其他想法? – user2547656

+0

你自己創建了服務器嗎? –

+0

如果問題出在服務器端,那麼在沒有檢查服務器的情況下,如果服務器沒有發送數據,則沒有其他方法可以解決此問題,如果客戶端無法解決問題。如果服務器接收到您發送的數據,則意味着連接處於活動狀態。如果您的客戶端沒有收到任何內容,則意味着服務器沒有發送數據,您必須調試服務器才能解決此問題 –

相關問題