NetworkStream.当我的一个客户端崩溃时,我会挂起我的服务器应用程序

本文关键字:我的 挂起 应用程序 服务器 崩溃 客户端 一个 NetworkStream | 更新日期: 2023-09-27 18:06:11

我有一个client -server .net应用程序,那些通过tcp通信。我的服务器定期向我的客户端发送原始字节包。

它在99.9%的情况下工作得很好,但有时,当我的一个客户端崩溃时(一年两次,而不是更多),我的服务器会挂起。

我调试了它(通过添加一些测试代码到我的客户端崩溃我的应用程序),并注意到问题是在stream.Write(bytes, 0, bytes.Length);。它什么都不做,没有响应,没有返回,只是挂起。Stream是一个NetworkStream。

我之前检查了stream.CanWrite,但它响应为true。

那么,我如何检查服务器端,我的一个客户端崩溃了?在向其他客户端发送数据之前,我应该在NetworkStream(或其他东西)上检查什么?

NetworkStream.当我的一个客户端崩溃时,我会挂起我的服务器应用程序

设置TCP连接的套接字超时时间。现在看起来是无限的,所以服务器无限期地等待来自死亡客户端的响应

Write可能会挂起,因为对方没有从套接字中读取,并且他们的操作系统套接字缓冲区已满(但他们没有关闭套接字,也没有处于错误状态)。

下面是对这种场景的描述:http://stringarray.net/?p=29