c# - Read() 阻塞问题

标签 c# tcpclient

我正在用 C# 开发服务器应用程序。客户端可以连接到服务器并发出各种请求。目前,当客户端连接时,我会生成一个新线程来处理请求。我正在使用 TCPClient 类来处理客户端连接。我的服务器工作如下:

  1. 客户端通过请求连接到服务器
  2. 服务器处理请求
  3. 服务器等待客户端是否有更多请求
  4. 如果客户端在一段时间内没有发出另一个请求,服务器会终止连接

我的问题如下:

当我读取从 TCPClient 类获得的 NetworkStream 对象时,如果没有可用数据,NetworkStream Read() 方法不会阻塞。当服务器到达第 3 步时,我想在 NetworkStream 上设置一些超时,如果客户端在这段时间内不再发出任何请求,服务器应该在抛出超时异常时终止连接。当我的服务器到达第 3 步时,NetworkStream Read() 方法不会阻塞,不管我将它的 ReadTimeout 属性设置成什么。任何人都可以帮助我,或者建议一种更好的方法来做我想做的事情。

谢谢

最佳答案

如果没有数据可读,NetworkStream.Read 和 ReadByte 应该阻塞直到超时。我认为调用更有可能正在读取一些东西,可能是一堆零。仔细检查客户端发送的数据。

关于c# - Read() 阻塞问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1189917/

相关文章:

java - TCP 连接期间应用程序崩溃

c# - 如何将 Controller Action 的参数传递给 Ninject 具体类型?

c# - Apple TV 的 TcpClient 或 HttpWebRequest 在 30 秒后结束?

c# - 分析 .net 库

c# - 读取用户 session 时 HttpRuntime CacheInternal NULL 引用异常(反射)

sockets - 使用 NetworkStream 类时检测客户端 TCP 断开连接

java - 使用本地端口从网站发送 TCP/IP 请求

sockets - 在Xamarin for Windows Phone中使用Windows.Networking.Sockets

c# - 复制到 Dropbox 文件夹时修改 LastWriteTime

c# - KeyNotFoundException 与在线数据库