0

是否可以使用 GZipStream 在 C# 中传递 SslStream?即你能做到吗


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 流(即,这是两个单独的示例,而不是一个示例),因为这听起来不太可能工作。

于 2010-09-17T13:12:34.687 回答
0

这是可能的,有时可能会奏效,但有时也可能会失败。如果您的协议始终允许您在 SSLStream 关​​闭之前“干净地关闭”GZipStream,它应该可以工作。“完全关闭”是指 GZipStream 关​​闭效果(压缩缓冲区的刷新)可以发生并传播到对等方。它可能会失败,因为 Ssl 允许相当激烈的闭包语义。请参阅RFC 2246的第 7.2.1 节。

于 2010-09-17T14:00:12.647 回答