.Net 套接字读取功能阻止问题
本文关键字:问题 功能 套接字 读取 Net | 更新日期: 2023-09-27 18:34:17
我在C#.Net中有客户端-服务器应用程序,为此我正在使用Tcp套接字。我使用以下函数来积极关闭套接字对象。
void CloseSocket(Socket socket)
{
if(socket != null)
{
socket.ShutDown(ocketShutdown.Both);
socket.Close();
}
}
在正常情况下,此函数运行良好,我的方法返回从读取函数返回的 0 字节。
但是每当客户端进程被任务管理器终止时,服务器程序就会阻止进入网络流的读取功能。
如何解决此读取阻止功能?我不想使用 AsyncRead 函数,因为整个项目都使用阻止策略,所以现在写我无法将其更改为异步模式。
谢谢,提前。
我假设你的意思是,当客户端没有完全关闭连接时,服务器最终可能会无限期地阻塞Read
,即使客户端实际上已经突然终止。如果是这样:是的,就会发生这种情况。因此,如果要使用同步读取方法,则应使用超时,特别是ReceiveTimeout
。如果您有多消息协议,则可能值得定期添加某种心跳消息,以便您从空闲连接中正确识别真正的僵尸(例如:如果您每分钟发送一次心跳,并且您没有看到连接上的任何活动 3 分钟,请用铲子敲击它)。
**you can try this may help you**
public void close()
{
if(clientSocket != null )
{
sendCommand("QUIT");
}
cleanup();
}
private void cleanup()
{
if(clientSocket!=null)
{
clientSocket.Close();
clientSocket = null;
}
logined = false;
}