C# 从中解压缩gzipstream
我制作了一个简单的代理服务器。工作正常,但gzip解压缩不起作用:C# 从中解压缩gzipstream,c#,sockets,gzip,compression,C#,Sockets,Gzip,Compression,我制作了一个简单的代理服务器。工作正常,但gzip解压缩不起作用: 幻数不正确。当然可以 没有错误,但gzipstream不会解压缩 其工作原理如下: private void HandleTraffic() { while ((bytesRead = realServer.Receive(buffer, 0, BODYBUFFERSIZE, SocketFlags.None)) > 0) { decompressedBuffer = new byte[BO
private void HandleTraffic()
{
while ((bytesRead = realServer.Receive(buffer, 0, BODYBUFFERSIZE, SocketFlags.None)) > 0)
{
decompressedBuffer = new byte[BODYBUFFERSIZE];
if (t == "gzip")
{
MemoryStream outputStream = new MemoryStream(), inputStream = new MemoryStream();
inputStream.Write(buffer, 0, bytesRead);
inputStream.Position = 0;
inputStream.Flush();
using (GZipStream gz = new GZipStream(inputStream, CompressionMode.Decompress))
{
gz.CopyTo(outputStream);
}
decompressedBuffer = outputStream.ToArray();
MessageBox.Show(ASCIIEncoding.ASCII.GetString(decompressedBuffer));
}
}
}
InputStream已填充,但outputStream未解压缩或显示错误“幻数不正确”
在这个作业中,套接字是必需的。您不需要以任何方式在代理服务器中处理数据,解压、泄气等等。只需复制字节。您需要查看的唯一数据是客户端的第一行,即HTTP CONNECT命令。我的解决方案是关闭Fiddler。这可能是一个愚蠢的问题,但您确定收到了正确的输入数据吗?我在尝试解压数据之前有一些自定义标题的数据时遇到了问题。谢谢xxbbcc。我读到\r\n\r\n。那是头球,不是吗?在那之后,我将进一步研究尸体。非gzip请求工作正常。很多例子都是关于压缩和解压缩文件的。但这是来自互联网主机。我真的不知道:-(EJP,谢谢。我知道复制字节。但是:gzip数据将导致“下载为octetstream”消息。复制“压缩数据”和“未压缩数据”之间有区别吗?(我使用的是AscienceODing:这是问题吗?)EJP,你的意思是将字节传递到套接字吗?它不能像预期的那样工作。@JeroenBokier处理数据和复制数据之间没有区别。数据包括头和请求正文,而不管头说什么,也不管正文是如何编码的。只需复制字节,就不会出错。如果出错,你就可以ren做得不对。老实说,这篇文章一点帮助都没有。我收到了相同的错误,我不知道为什么。如果你只是复制字节,而你收到的错误是一个解压缩错误,你不可能收到相同的错误。删除解压缩代码!