0

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

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 ; 

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

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

谁能帮我?

提前致谢!

4

1 回答 1

0

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

于 2013-07-03T17:54:48.767 回答