C# 3.0 从服务器(套接字)解压缩gzip响应

C# 3.0 从服务器(套接字)解压缩gzip响应,c#-3.0,C# 3.0,嗯,好的,在将一些数据发送到服务器之后,注意以下特定部分: "Accept-Encoding: gzip,deflate\r\n" 我得到以下回应: HTTP/1.1 200 OK Server: nginx Date: Fri, 09 Apr 2010 23:25:27 GMT Content-Type: text/html; charset=UTF-8 Transfer-Encoding: chunked Connection: keep-alive X-Powered-By: PHP/5

嗯,好的,在将一些数据发送到服务器之后,注意以下特定部分:

"Accept-Encoding: gzip,deflate\r\n"
我得到以下回应:

HTTP/1.1 200 OK
Server: nginx
Date: Fri, 09 Apr 2010 23:25:27 GMT
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
X-Powered-By: PHP/5.2.8
Expires: Mon, 26 Jul 1997 05:00:00 GMT
Last-Modified: Fri, 09 Apr 2010 23:25:27 GMT
Cache-Control: no-store, no-cache, must-revalidate
Cache-Control: post-check=0, pre-check=0
Pragma: no-cache
Content-Encoding: gzip
Vary: Accept-Encoding

7aa
??U-?Rh?%?2?w??PM]??7?qZ?K?)???2?&??m???"q??/p9w?????x?[`tA!G???G?5z??????a>k????????Q
???N??
('??f?,(??Y:5B???-?)?3x^0e:j?`,???**???F>G)?2????@???b??????A?k???Ar?n?
但是我该如何解压呢?注意,我正在使用Socket类来完成所有工作

我知道如何解压,但这里的问题在于,我无法将数据包与gzip数据、psuedo-psuedocode(或其他任何内容)分离,这取决于我的解压方式:

Socket sends packet;
Socket reads response from server, stores into a ByteArray;
Create MemoryStream, use ByteArray;
Create GZipStream, use Memorystream;
现在问题出现了,;我得到以下错误:

System.IO.InvalidDataException GZip头中的幻数不正确 对的你一定要经过 GZip流


我希望解释足够清楚>\p>您需要gzip的内容在一个双换行符之后开始,并用于(如果存在)内容长度字节。你可以从那里开始

您是否可以使用
System.Web.HttpRequest
?它将为您处理解析响应的许多管理细节


还是必须使用原始套接字?

我尝试将响应直接转换为字符串,并使用“\r\n\r\n”将其拆分,然后将其转换回字节数组等,但没有成功。另外,我给出的回答是x个不同的答案之一,意思是;每次的反应都不一样。我可以使用HttpWebRequest,但我不想(因为我已经知道如何使用)。我只想使用Socket类来完成它。对我来说,这是为了学习如何使用Socket类而不是HttpWebRequest或TcpClient进行操作。完全可能是由于编码问题导致byte[]->string->byte[]往返失败。你能试着转换它,然后再转换回来,而不用在中间进行拆分吗?如果字符串不相同,我可以想出更多的方法来尝试。显然,字符串是相同的。psuedo psuedocode:接收响应,存储在ByteArray[]中;转换为字符串A;转换为ByteArray[];转换为字符串B;用B.检查字符串A。。如果(A==B){Console.Write(“Ok”)};用wireshark检查一下你的bytearray和电线上的东西。我找不到有什么问题。