【问题标题】:NetworkStream.Write hangs my sever app when one of my clients crashed当我的一个客户端崩溃时,NetworkStream.Write 挂起我的服务器应用程序
【发布时间】:2013-03-17 13:52:02
【问题描述】:

我有一个客户端服务器 .net 应用程序,它们通过 tcp 进行通信。我的服务器会定期向我的客户端发送原始字节数据包。

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

我对其进行了调试(通过向我的客户端添加一些导致我的应用程序崩溃的测试代码),并注意到问题出在stream.Write(bytes, 0, bytes.Length);。它简单不做任何事情,不响应,不返回,只是挂起。 Stream 是一个 NetworkStream。

我之前检查过stream.CanWrite,但它的响应是真的。

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

【问题讨论】:

    标签: c# .net networking tcp networkstream


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      以下是对这种情况的描述: http://stringarray.net/?p=29

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-11-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-05
        • 1970-01-01
        相关资源
        最近更新 更多