0

C#でSslStreamを渡すGZipStreamを使用することは可能ですか? つまり、できますか


GZipStream stream = new GZipStream(sslStream, CompressionMode.Compress);
stream.Write(...);

...

GZipStream stream = new GZipStream(sslStream, CompressionMode.Decompress);
stream.Read(...);

これが可能である場合、SslStream はこの後も使用可能な状態にあるのでしょうか、それとも閉じる必要がありますか?

ありがとう。

4

2 に答える 2

1

なぜだかわかりません。SSLストリームにはバイトが与えられるだけですが、それはとにかくそれが期待したものです. 重要なことは、 (圧縮のために実行中のバッファーを保持しなければならないため) 常に実際にフラッシュするとは限らないため、GZipStream適切に閉じることです。Flush()そう:

using(GZipStream stream = new GZipStream(sslStream, CompressionMode.Compress)) {
    stream.Write(...);
    stream.Close(); // arguably overkill; the Dispose() from "using" should be enough
}

また、同じ SSL ストリームに対して読み取りと書き込みを行っていないと仮定しています (つまり、1 つの例ではなく 2 つの別々の例です)。

于 2010-09-17T13:12:34.687 に答える
0

可能で、うまくいくこともありますが、失敗することもあります。SSLStream が閉じる前に、プロトコルが常に GZipStream を「きれいに閉じる」ことを許可している場合は、機能するはずです。「きれいに閉じる」とは、GZipStream のクロージャー効果 (圧縮バッファーのフラッシュ) が発生し、ピアに伝播できることを意味します。Ssl はかなり抜本的なクロージャー セマンティクスを許可するため、失敗する可能性があります。RFC 2246のセクション 7.2.1 を参照してください。

于 2010-09-17T14:00:12.647 に答える