是否可以使用GZipStream在C#中传递SslStream?即你能做什么
GZipStream stream = new GZipStream(sslStream, CompressionMode.Compress);
stream.Write(...);
...
GZipStream stream = new GZipStream(sslStream, CompressionMode.Decompress);
stream.Read(...);
如果可能,SslStream在此之后是否仍然处于可用状态,还是应该关闭?
感谢。
答案 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节。