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 ;
我必须关闭并再次运行我的应用程序才能再次建立通信。
如何检测我是否失去了与服务器的连接?
有人能帮我吗?
提前感谢!
发送一个保活数据包来检测你是否已经失去了与服务器的连接,如果你向服务器发送了一个数据包,但没有从服务器收到一个不意味着你已经失去了连接的数据包,你必须检查服务器端是否有另一个错误或客户端是否有错误,调试你的服务器以查看你是否从客户端收到了数据包,如果您从客户端收到一个数据包,那么您的连接并没有丢失,它仍然有效。