簡體   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