我可以想到这些可能的答案:
答案 0 :(得分:2)
直到数据写入发送方的发送缓冲区 因此,如果缓冲区已满,它将阻止。
如果发送缓冲区尚未传输数据,由于网络问题或接收端的接收缓冲区已满,发送缓冲区可能已满。
你可以进行一项实验:建立一个发送者和接收者,将发送者的套接字发送缓冲区设置为小的,接收者的接收缓冲区设置为小到的。
开始发送,接受接收方的连接,但不接收。当发送的字节数大约是SenderSendBuffer + ReceiverReceiveBuffer时,套接字将被阻塞。
答案 1 :(得分:0)
NetworkStream
不会缓冲数据。最终,对NetworkStream.Write
的调用转换为套接字send函数调用。这个函数的MSDN文章说:
成功完成发送 功能并不表示 数据已成功交付 收到收件人。这个 功能仅表示数据 已成功发送。
这会回答你的问题吗?