0

次のように SslStream から読み取っています。

byte[] data = new byte[tcp.ReceiveBufferSize];
int bytesRead = -1;
do {
    bytesRead = stream.Read(data, 0, data.Length);

    using (MemoryStream ms = new MemoryStream(data, 0, bytesRead))
    using (StreamReader rd = new StreamReader(ms))
    {
        string returnData = rd.ReadToEnd();
        sb.Append(returnData);
    }
} while (bytesRead != 0);

ストリームから読み取ります。ただし、ストリームの実際の長さは不明であるため、最後の読み取りでアプリがフリーズするだけです。サンプル メッセージは次のようになります。

HTTP/1.1 200 OK
Content-Type: application/json;charset=utf-8
Content-Length: 11534
Server: Jetty(6.1.x)

{long json data here...}

サーバーはコンテンツの長さを返しますが、ストリーム全体の長さではありません。このストリームを正常に読み取る効率的な方法はありますか?

4

1 に答える 1

0

私はちょうど同じ問題を解決しました。バッファー サイズ = 4096 で、最後の読み取りでのフリーズを防ぐために、SslStream.Read がバッファー サイズより小さいかどうかを確認する必要があります。true の場合は読み取りループを中断し、それ以外の場合は読み取りを続行します。

于 2015-06-04T02:26:39.573 に答える