【发布时间】:2011-09-09 21:30:00
【问题描述】:
我能想到这些可能的答案:
- 直到数据写入 IP 堆栈中的某个内部缓冲区。
- 直到数据通过网络发送。
- 直到收到另一台机器的接收确认。
【问题讨论】:
标签: c# .net tcp io networkstream
我能想到这些可能的答案:
【问题讨论】:
标签: c# .net tcp io networkstream
直到数据写入发送方的发送缓冲区。
所以如果缓冲区满了,就会阻塞。
如果由于网络问题或接收端的接收缓冲区已满,尚未传输数据,则发送缓冲区可能已满。
你可以做一个实验:做一个发送者和接收者,将发送者的套接字发送缓冲区设置为小,接收者的接收缓冲区设置为小。
开始发送,在接收端接受连接,但不接收。当发送的字节数约为 SenderSendBuffer + ReceiverReceiveBuffer 时,套接字将被阻塞。
【讨论】:
NetworkStream 不缓冲数据。最终,对NetworkStream.Write 的调用将转换为套接字send 函数调用。此功能的 MSDN 文章说:
成功完成一次发送 功能并不表示 数据已成功交付并 收到给收件人。这 函数只表示数据是 发送成功。
这能回答你的问题吗?
【讨论】: