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

标签 c# .net networking tcp networkstream

我有一个客户端服务器 .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/

相关文章:

c# - Autofac:解析类型的所有实例

c# - 绑定(bind)到 DataTemplate 中的 ToString() 方法

c# - 如何获取 JSON 对象 - C#

java - 如何用 Java 创建简单的 UDP 客户端-服务器通信?

java - 如何使用Java判断我运行的机器使用的是ipv4还是ipv6?

c# - 如何使用 Regex.Split 拆分字符串并保留所有分隔符?

C#如何识别guest帐号?

c# - 在 C# 中播放声音 byte[]

c# - 如何尽可能高效地处理大量并发磁盘写请求

windows - 如何在 VBScript 中获取%用户名%?