C # SslStream с GZipStream - PullRequest
       11

C # SslStream с GZipStream

0 голосов
/ 17 сентября 2010

Можно ли использовать GZipStream, передавая SslStream в C #?т.е. вы можете сделать


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

...

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

Если это возможно, SslStream все еще находится в рабочем состоянии после этого или он должен быть закрыт?

Спасибо.

Ответы [ 2 ]

1 голос
/ 17 сентября 2010

Не могу понять, почему нет; поток 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 (т.е. это два отдельных примера, а не один пример), поскольку это не ' Звук может сработать.

0 голосов
/ 17 сентября 2010

Это возможно и может иногда работать, но иногда может и не работать. Он должен работать , если , ваш протокол всегда позволяет вам «аккуратно закрыть» GZipStream до закрытия SSLStream. Под «чистым закрытием» я имею в виду, что эффекты закрытия GZipStream (очистка буфера сжатия) могут возникать и распространяться на одноранговый узел. Это может потерпеть неудачу, потому что Ssl допускает довольно радикальную семантику закрытия. См. Раздел 7.2.1 RFC 2246 .

...