0

クライアント アプリケーションにサーバーからの応答を読み取らせようとしていますが、ここで特定の概念を理解するのに本当に苦労しています。

私が行った調査によると、実際にデータを読み取る前に、読み取るバイトの長さが必要です。NetworkStreamこれは私にはほとんど意味がありません。データが到着する前に、どのくらいの量のデータが入ってくるかをどのように知ることができますか?

このコード:

using (var stream = client.GetStream())
{
    stream.Write(data, 0, data.Length);
    stream.Flush();

    Console.WriteLine("Data sent.\n");

    Console.WriteLine("Reading response...\n");

    byte[] buffer = new byte[1024];

    int bytesRead = stream.Read(buffer, 0, buffer.Length);
}

設定されたサイズのバッファに 1024 バイトを読み込みます。では、サーバーからの応答が 1024 バイトを超える場合はどうなるでしょうか。じゃあ何?

誰かがこの概念を理解するのを手伝ってくれたら、とても感謝しています.

4

2 に答える 2

1

NetworkStream.DataAvailable が true の間、ループする必要があります。ここを参照してください:

http://msdn.microsoft.com/en-us/library/system.net.sockets.networkstream.read.aspx

于 2013-10-15T20:33:50.250 に答える
1

「メッセージの終わり」を決定するために、送信者と受信者の間で何らかの事前に合意されたスキーム (プロトコル) が必要です。

通常、これは、メッセージの長さを含むヘッダーでメッセージを開始することによって行われます。たとえば、最初の 4 バイトが受信メッセージの長さを決定することに双方が同意できるため、受信者はそのバイト数を読み取ります。

もう 1 つの方法は、メッセージの終わりを示す特定のバイト シーケンスを持つことです。たとえば、受信者は の ascii バイトが表示されるまで読み込みを続けます<EOF>

DataAvailableメッセージをチャンクで受信する可能性が非常に高くDataAvailable、完全なメッセージを受信する前に false になる可能性があるため、使用しないでください。

于 2013-10-15T20:52:02.180 に答える