Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从中解压缩gzipstream_C#_Sockets_Gzip_Compression - Fatal编程技术网

C# 从中解压缩gzipstream

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

我制作了一个简单的代理服务器。工作正常,但gzip解压缩不起作用:

  • 幻数不正确。当然可以
  • 没有错误,但gzipstream不会解压缩
  • 其工作原理如下:

    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做得不对。老实说,这篇文章一点帮助都没有。我收到了相同的错误,我不知道为什么。如果你只是复制字节,而你收到的错误是一个解压缩错误,你不可能收到相同的错误。删除解压缩代码!