我有一个服务器和一个使用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:块长度与其补码不匹配。
有人知道问题是什么,我该如何解决?
编辑:我已经尝试在解压缩过程开始之前跳过前两个字节。