C#套接字-如何检测我的客户端是否已断开连接

本文关键字:客户端 我的 是否 连接 断开 检测 套接字 何检测 | 更新日期: 2023-09-27 18:21:05

我有一个连接到服务器套接字的应用程序客户端,我有一项功能可以检测何时发生断开连接:

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 ; 

我必须关闭并再次运行我的应用程序才能再次建立通信。

如何检测我是否失去了与服务器的连接?

有人能帮我吗?

提前感谢!

C#套接字-如何检测我的客户端是否已断开连接

发送一个保活数据包来检测你是否已经失去了与服务器的连接,如果你向服务器发送了一个数据包,但没有从服务器收到一个不意味着你已经失去了连接的数据包,你必须检查服务器端是否有另一个错误或客户端是否有错误,调试你的服务器以查看你是否从客户端收到了数据包,如果您从客户端收到一个数据包,那么您的连接并没有丢失,它仍然有效。