gpt4 book ai didi

c# - .Net Socket Read 功能阻塞问题

转载 作者:行者123 更新时间:2023-12-03 11:58:15 25 4
gpt4 key购买 nike

我在 C#.Net 中有客户端-服务器应用程序,为此我正在使用 Tcp 套接字。我已经使用以下函数来积极关闭套接字对象。

void CloseSocket(Socket socket)
{
if(socket != null)
{
socket.ShutDown(ocketShutdown.Both);
socket.Close();
}
}

在正常情况下,此函数完美运行,我的方法返回读取函数返回的 0 个字节。

但是每当客户端进程被任务管理器服务器程序终止时,就会阻塞到网络流的读取功能中。

如何解决此读取阻止功能?我不想使用 AsyncRead 函数,因为整个项目都使用阻塞策略,所以现在写我不能将它更改为异步模式。

提前致谢。

最佳答案

我假设您所说的是当客户端没有完全关闭连接时,服务器最终可能会在 Read 处阻塞。无限期,即使客户端实际上已经突然终止。如果是这样:是的,那会发生。所以如果你想使用同步读取方法,你应该使用超时,特别是 ReceiveTimeout .如果您有一个多消息协议(protocol),则可能值得定期添加某种心跳消息,以允许您从空闲连接中正确识别真正的僵尸(例如:如果您每分钟发送一次心跳,而您没有看到连接上的任何事件 3 分钟,用铲子敲击它)。

关于c# - .Net Socket Read 功能阻塞问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19223185/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com