.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 函数,因为整个项目都使用阻止策略,所以现在写我无法将其更改为异步模式。

谢谢,提前。

.Net 套接字读取功能阻止问题

假设你的意思是,当客户端没有完全关闭连接时,服务器最终可能会无限期地阻塞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;
        }