我有一个客户端服务器 .net 应用程序,它们通过 tcp 进行通信。我的服务器定期向我的客户端发送原始字节数据包。
它在 99.9% 的时间里都工作得很好,但有时,当我的一个客户端崩溃时(一年两次,而不是更多),我的服务器就会挂起。
我对其进行了调试(通过向客户端添加一些测试代码,导致应用程序崩溃),并注意到问题出在 stream.Write(bytes, 0, bytes.Length);
中。它很简单,不执行任何操作,不响应,不返回,只是挂起。 Stream 是一个 NetworkStream。
我之前检查过stream.CanWrite
,但它响应 true。
那么,我如何在服务器端检查我的一个客户端是否崩溃了?在将数据发送到其他客户端之前,我应该在 NetworkStream(或其他东西)上检查什么?
最佳答案
为 TCP 连接的套接字设置超时。看起来现在是无限的,所以服务器无限期地等待死客户端的响应。
关于c# - 当我的一个客户端崩溃时,NetworkStream.Write 挂起我的服务器应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15659591/