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

时间:2013-07-03 17:47:13

标签: c# sockets

我有一个连接到服务器套接字的应用程序客户端,我有一个检测断开连接的函数:

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 ; 

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

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

任何人都可以帮助我吗?

提前致谢!

1 个答案:

答案 0 :(得分:0)

发送保持活动数据包以检测您是否丢失了与服务器的连接,如果您向服务器发送数据包但是没有收到服务器的数据包并不意味着您丢失了连接,则必须检查服务器端是否有其他错误或客户端是否有错误,调试服务器以查看是否从客户端收到数据包,如果您从客户端收到数据包,那么您的连接不会丢失,它仍然存在。