Имейте GzipStream
подачу SSLStream
.
Первый раз сегодня заметил "Поток gzip не может содержать более 4 ГБ данных."
at System.IO.Compression.FastEncoder.GetCompressedOutput(Byte[] outputBuffer)
at System.IO.Compression.DeflateStream.InternalWrite(Byte[] array, Int32 offset, Int32 count, Boolean isAsync)
at System.IO.Compression.DeflateStream.Write(Byte[] array, Int32 offset, Int32 count)
at System.IO.Compression.GZipStream.Write(Byte[] array, Int32 offset, Int32 count)
at ...
Writer toсеть передает данные быстрее, чем Reader получает данные.Как таковая причина ошибки мне неясна.
Является ли это ограничением на общее количество байтов, записанных в потоке, или это проблема с отставанием в получении данных из GZipStram
и в SSLStream
?
Reader может разархивировать и использовать данные до окончания потока, поэтому я никогда не думал, что может быть такое ограничение на общее количество записанных байтов.
Кажется, нет способа проверить длину.
Может кто-нибудь поделиться примерами того, как они справились с этим?
Схема кода:
TcpClient network = = new TcpClient();
network.Connect(m_config.Address.Host, m_config.Address.Port);
SslStream sslStream = new SslStream(network.GetStream(), true .. ssl bits
Stream outStream = new GZipStream(sslStream, CompressionMode.Compress, true);
try {
String nextMessage;
while (messages.Dequeue(out nextMessage))
{
byte[] buffer = Encoding.UTF8.GetBytes(nextMessage + "\n");
outStream.Write(buffer, 0, buffer.Length);
}
} catch()