0

データのストリームを受信したい。そのため、データが枯渇することがあります。その場合、Receiveメソッドがこれまでに受け取ったものを返すとよいでしょう。

.Netを使用していて、そのメソッドSocketを呼び出すとReceive、バッファーが完全にいっぱいになるまで、その呼び出しはブロックされますか?それとも、少なくとも1バイトを返すことができるとすぐに戻りますか?(ソケットが閉じていないことを前提としています)

サイズパラメータを明示的に渡しても問題ありませんか?そして、非同期メソッドBeginReceiveは何か影響がありますか?(どちらの場合も、動作は同じになると思います)

この回答を読むときは、バッファがいっぱいになることを常に期待する必要があるようです。これは、を実行するようにアドバイスしているためですwhile (bytesRead == bytesRequested)。しかし、MSDNドキュメントの例では、while (bytesRead > 0)

4

1 に答える 1

1

ネットワークスタックは、利用可能なもの(カーネル内でバッファリングされるもの)の最小値と、提供するアプリケーションバッファのサイズを提供します。ここでの秘訣は、データがまだ利用できない場合に通常の受信がブロックされることですwhile。これが、提供する2つのステートメントの違いです。最初のステートメントは短い読み取りで発生します。これはおそらく次の読み取りがブロックされることを示し、2番目のステートメントはブロックされます。 1つはストリームの終わり、つまりソケットが反対側から閉じられていることを探します。

于 2012-08-30T16:31:03.863 に答える