4

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

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

2 回答 2

4

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

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

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

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

于 2011-06-07T08:38:39.527 回答
0

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

发送功能的成功完成并不表示数据已成功交付和接收到接收者。该函数仅表示数据发送成功。

这回答了你的问题了吗?

于 2011-06-07T08:47:28.833 回答