これらの可能な答えを考えることができます:
- データが IP スタック内の内部バッファーに書き込まれるまで。
- データがネットワーク経由で送信されるまで。
- 相手機から受信確認があるまで。
これらの可能な答えを考えることができます:
送信側の送信バッファにデータが書き込まれるまで。
したがって、バッファがいっぱいになるとブロックされます。
データがまだ送信されていない場合、ネットワークの問題または受信側の受信バッファーがいっぱいであるために、送信バッファーがいっぱいになる可能性があります。
実行できる実験があります。送信者と受信者を作成し、送信者のソケット送信バッファーを小さなものに設定し、受信者の受信バッファーを小さなものに設定します。
送信を開始し、受信側で接続を受け入れますが、受信しません。送信バイト数が SenderSendBuffer + ReceiverReceiveBuffer 程度になるとソケットがブロックされます。
NetworkStream
データをバッファリングしません。最終的に、への呼び出しはソケット送信関数呼び出しにNetworkStream.Write
変換されます。この関数に関する MSDN の記事は次のように述べています。
送信機能が正常に完了しても、データが正常に配信され、受信者に受信されたことを示すわけではありません。この関数は、データが正常に送信されたことを示すだけです。
これはあなたの質問に答えていますか?