2011-06-07 67 views

回答

2

直到數據寫入發送方的發送緩衝區。
所以如果緩衝區滿了,它會阻塞。

由於網絡問題或接收端的接收緩衝區已滿,發送緩衝區可能已滿,如果它尚未傳輸數據。

有一個實驗可以進行:創建發送者和接收者,將發送者的套接字發送緩衝區設置爲小,並將接收者的接收緩衝區設置爲小。

開始發送,在接收方接受連接,但不接收。當發送的字節數大約是SenderSendBuffer + ReceiverReceiveBuffer時,套接字將被阻塞。

0

NetworkStream不緩衝數據。最終,致電NetworkStream.Write轉換爲插座send函數調用。 MSDN文章這個函數說:

的發送 功能的順利完成並不表明 數據被成功交付和接收收件人 。該功能僅表示 成功發送。

這是回答您的問題嗎?

+0

NetworkStream不緩衝數據,但Socket.Send將數據放入內部緩衝區。 – 2011-06-07 09:03:22

+0

@Alex Aza:我正在用反光鏡看它,不,它沒有。我在看.net 4.0實現什麼.net版本你在說什麼? – 2011-06-07 09:07:44

+0

但底層實現是做什麼的?也就是說,Windows IP堆棧在短時間內緩衝數據嗎? – 2011-06-07 10:06:14

相關問題