C# 无法从NetworkSteam(zlib)解压缩消息
我有问题。 我将XML请求发送到NetworkStream,得到答案[head]-未压缩,和[body]-压缩的zlib 当我使用代码时C# 无法从NetworkSteam(zlib)解压缩消息,c#,model-view-controller,networkstream,C#,Model View Controller,Networkstream,我有问题。 我将XML请求发送到NetworkStream,得到答案[head]-未压缩,和[body]-压缩的zlib 当我使用代码时 public static string UnZipStr(byte[] input) { using (MemoryStream inputStream = new MemoryStream(input)) { using (DeflateStream gzip =
public static string UnZipStr(byte[] input)
{
using (MemoryStream inputStream = new MemoryStream(input))
{
using (DeflateStream gzip =
new DeflateStream(inputStream, CompressionMode.Decompress))
{
using (StreamReader reader =
new StreamReader(gzip, System.Text.Encoding.UTF8))
{
return reader.ReadToEnd();
}
}
}
}
我犯了一个错误
System.IO.InvalidDataException:“解码期间检测到错误数据。”
我确实删除了[head](只是不读取前100字节=大小head),但结果是一样的
当我用它的时候
private MemoryStream Deflate(byte[] data, int level, bool zlib)
{
var memoryStream = new MemoryStream();
var deflater = new Deflater(level, !zlib);
using (DeflaterOutputStream outStream = new DeflaterOutputStream(memoryStream, deflater))
{
outStream.IsStreamOwner = false;
outStream.Write(data, 0, data.Length);
outStream.Flush();
outStream.Finish();
}
return memoryStream;
}
我的消息不是真的。我不知道水平,因为我用了所有的-从1到9。和两次-用正确和错误的标志
一条解压缩消息:
(��]�R�F\u0012}�W�����N��R�5\0F���ƅ\n��uT[�J�-���_��(Q$H)��,��v�+���我@����\u0003��Vl˔h���ӧ/x������ã��\u000e��Z��-G���O��\u001f��ۭ我看不出您发布的代码有任何问题。问题一定出在您未发布的代码中。因此,无论在
Deflate(…)
和UnZipStr(…)
之间做了什么,都一定是更改了您的压缩数据
直接使用Deflate(…)
的输出作为UnZipStr(…)
的输入,您可以自己尝试一下:
请创建并发布一个,这意味着您将发布如何压缩和解压示例中的某些数据。这可能会帮助您自己发现错误,也可能会给我们一些测试和调试来帮助您。这里有太多的未知数,除了说“您做错了什么”之外这里几乎没有人能做什么。
public string postXMLData(string request)
{
int port = XXXXX;
string ip = "XXX.XXX.XXX.XX";
int idClient = XXX;
StringBuilder response = new StringBuilder();
int byteSizeBuf = 1024;
byte[] buff = new byte[byteSizeBuf * 100];
byte[] byteRequest = Encoding.UTF8.GetBytes(request);
ConnectionMode connectionMode = ConnectionMode.Plain;
QueryHeader test = new QueryHeader(idClient, byteRequest.Length, connectionMode);
byte[] data = new byte[byteSizeBuf];
byte[] res = new byte[test.MessageLength + byteRequest.Length];
test.HeaderData.CopyTo(res, 0);
byteRequest.CopyTo(res, test.HeaderData.Length);
TcpClient tcpClient = new TcpClient();
tcpClient.Connect(ip, port);
NetworkStream netStream = tcpClient.GetStream();
netStream.Write(res, 0, res.Length);
string final = response.ToString(); //куда записывать
int pos = 0;
do
{
int bytes = netStream.Read(data, 0, data.Length);
response.Append(Encoding.UTF8.GetString(data, 0, bytes));
data.CopyTo(buff, pos);
pos += data.Length;
}
while (netStream.DataAvailable);
string decodedStr = UnZipStr(buff);
netStream.Close();
tcpClient.Close();
return final;
}
Console.WriteLine(UnZipStr(
Deflate(System.Text.Encoding.UTF8.GetBytes("Hello World!"), 9, false).ToArray()
));