使用deflatestream解压缩字节流

时间:2015-11-08 12:46:19

标签: c# c++ deflatestream

我有一个服务器和一个使用TCP套接字连接的客户端。在客户端(用C ++编写)我使用 zlib 库压缩字符串(str):

int bytesWritten = write(sockfd, &compressedString, compressedStringLength);

然后我将它发送到服务器。这是我将压缩字符串写入套接字的代码行:

NetworkStream stream = getStream(ref server); //server is a TcpListener object which is initialized to null.
byte[] bytes = new byte[size];
stream.Read(bytes, 0, size);
Stream decompressedStream = Decompress(bytes);

在服务器(用C#编写)中,我从套接字接收压缩字节流,并使用DeflateStream类解压缩它:

private static Stream Decompress(byte[] input)
{
        var output = new MemoryStream();

        using (var compressStream = new MemoryStream(input))
        using (var decompressor = new DeflateStream(compressStream, CompressionMode.Decompress))
        {
            decompressor.CopyTo(output);
        }

        output.Position = 0;
        return output;
 }

这是解压缩功能:

decompressor.CopyTo(output);

压缩过程和通过套接字发送压缩字节有效,但我在上面的解压缩函数的行{{1}}处得到一个异常:System.IO.InvalidDataException:块长度与其补码不匹配。

有人知道问题是什么,我该如何解决?

编辑:我已经尝试在解压缩过程开始之前跳过前两个字节。

0 个答案:

没有答案