使用GZipStream的C#SslStream

时间:2010-09-17 12:55:33

标签: c# ssl gzip gzipstream sslstream

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


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

...

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

如果可能,SslStream在此之后是否仍然处于可用状态,还是应该关闭?

感谢。

2 个答案:

答案 0 :(得分: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 :(得分:0)

有可能并且有时可以工作,但有时也可能失败。它应该工作如果你的协议总是允许你在SSLStream关闭之前“干净地关闭”GZipStream。通过“干净地关闭”,我的意思是GZipStream闭包效果(压缩缓冲区的刷新)可以发生并传播给对等体。它可能会失败,因为Ssl允许相当激烈的闭包语义。见RFC 2246的第7.2.1节。