繁体   English   中英

NetworkStream.Write 阻塞到什么时候?

[英]Until when does NetworkStream.Write block?

我能想到这些可能的答案:

  • 直到数据写入 IP 堆栈中的某个内部缓冲区。
  • 直到数据通过网络发送。
  • 直到收到来自另一台机器的接收确认。

直到数据被写入发送方的发送缓冲区。
因此,如果缓冲区已满,它将阻塞。

如果由于网络问题或接收器端的接收缓冲区已满,发送缓冲区可能尚未发送数据,则发送缓冲区可能已满。

您可以进行一个实验:制作发送方和接收方,将发送方的套接字发送缓冲区设置为较小的值,将接收方的接收缓冲区设置为较小的值。

开始发送,在接收方接受连接,但不接收。 当发送的字节数约为 SenderSendBuffer + ReceiverReceiveBuffer 时,套接字将被阻塞。

NetworkStream不缓冲数据。 最终,对NetworkStream.Write的调用将转换为套接字发送function 调用。 此 function 的 MSDN 文章说:

发送 function 成功完成并不表示数据已成功交付并接收到接收方。 这个function只表示数据发送成功。

这回答了你的问题了吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM