可以使用GZipStream在C#中传递SslStream吗?也就是说,你能做到
GZipStream stream = new GZipStream(sslStream, CompressionMode.Compress);
stream.Write(...);
...
GZipStream stream = new GZipStream(sslStream, CompressionMode.Decompress);
stream.Read(...);如果这是可能的,SslStream在此之后是否仍处于可用状态,还是应该将其关闭?
谢谢。
发布于 2010-09-17 21:12:35
我想没有什么不可以的;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-17 22:00:13
这是可能的,有时可能会起作用,但有时也可能失败。如果您的协议总是允许您在SSLStream关闭之前“干净利落地关闭”GZipStream,那么它应该可以工作。所谓“干净利落地关闭”,我的意思是GZipStream关闭效果(压缩缓冲区的刷新)可以发生,并传播到对等体。它可能会失败,因为Ssl允许相当激烈的闭包语义。请参阅RFC 2246的7.2.1节。
https://stackoverflow.com/questions/3735463
复制相似问题