簡體   English   中英

C#套接字-如何檢測我的客戶端是否失去連接

[英]C # Socket - How to detect if my client has lost connection

我有一個連接到服務器套接字的應用程序客戶端,有一個檢測何時斷開連接的功能:

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 ; 

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

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

誰能幫我?

提前致謝!

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM