2

ソケットスキームでのバッファの使用を理解しようとしています。これが私が理解していることであり、誰かが私が正しいかどうかを教えてくれたり、誤解している可能性のある場所にフィードバックをくれたりしたら、それは素晴らしいことです.

MSDN ので詳述されている非同期ソケットの使用(以下はすべてその例を参照しています)

以下は、私がポイントを理解している状態オブジェクトについて説明しています。

// State object for reading client data asynchronously
public class StateObject
{
    // Client  socket.
    public Socket workSocket = null;
    // Size of receive buffer.
    public const int BufferSize = 1024;
    // Receive buffer.
    public byte[] buffer = new byte[BufferSize];
    // Received data string.
    public StringBuilder sb = new StringBuilder();
}

現在、バッファは 1024 バイトであると表示されています。データを受信するとき、一度に 1024 バイトしか要求していませんか? また、非同期メソッド ReceiveCallback では、1024 のみを要求し、これがすべてのデータではない可能性があるため、次の 1024 を取得します。

基本的に、ソケットに送信された入力ストリームは 1024 バイトのチャンクで読み取られ、エンドポイントに到達するまで読み取りを続けます (独自の定義による)。

4

1 に答える 1

3

基本的に、ソケットに送信された入力ストリームは 1024 バイトのチャンクで読み取られ、エンドポイントに到達するまで読み取りを続けます (独自の定義による)。

正しい。TCP は単なるデータ ストリームであるため、ストリーム内のメッセージの場合、それぞれの長さを知る方法はありません (常に固定長でない限り)。したがって、メッセージの終わりを検出できるようにするには、何らかの種類のバッファーを使用してストリームから読み取る必要があります。

于 2013-01-25T10:44:42.247 に答える