You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NetworkStream.Read三种行为场景澄清:阻塞、返回0、抛出IOException

NetworkStream.Read三种行为的触发时机详解

折腾过NetworkStream.Read的人都懂,官方文档的描述和实际表现确实有出入,我把三种核心场景的触发时机给你讲得明明白白:

1. 何时会阻塞?

  • 当套接字连接处于正常活跃状态,且当前没有任何可读取的数据时,Read方法会进入阻塞状态。
  • 这里要纠正文档的模糊表述:文档说“若无数据可读,Read方法返回0”,但这个描述的前提是连接已经被正常关闭;如果只是暂时没数据、连接还活着,Read会一直等待,直到有数据抵达,或者连接状态发生变化(比如对方关闭连接)。

2. 何时返回0字节?

  • 只有当对方通过TCP正常关闭连接(发送FIN包),并且你已经读取完了该连接上所有剩余的数据后,下一次调用Read才会返回0。
  • 这个返回值是TCP协议的“正常结束”信号,代表对方不会再发送任何数据,此时Read不会阻塞,直接返回0。

3. 何时抛出IOException?

  • 当连接发生异常中断时,比如对方强制关闭套接字(发送RST包)、网络突然断开、本地套接字被意外关闭,或者读取过程中出现底层网络错误,Read就会抛出IOException。
  • 另外,如果在调用Read之前,你已经手动关闭了NetworkStream(比如调用Close()或Dispose()方法),此时调用Read也会触发这个异常。

内容的提问来源于stack exchange,提问作者KansaiRobot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:22:46