2012-10-22 104 views
1

我做了一個簡單的代理服務器。工作正常,但不是gzip解壓縮:解壓縮gzipstream從

  1. 幻數不正確。確定 。
  2. 沒有錯誤,但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的不是解壓縮或給我的錯誤「神奇的數字是不正確的」。

在這份工作中,插座是必需的。

+0

這可能是一個愚蠢的問題,但你確定你正在接收正確的輸入數據?我遇到了問題,試圖在數據之前解壓縮包含自定義標題的數據。 – xxbbcc

+0

謝謝xxbbcc。我讀到\ r \ n \ r \ n。這是標題,不是嗎?之後,我會繼續與身體接觸。非gzip請求完美無缺。 很多例子都是針對壓縮和解壓縮文件的。但是這是來自互聯網主持人。我真的不知道:-( –

回答

0

您無需以任何方式處理代理服務器中的數據,無論是解壓縮還是縮減。只需複製字節。您需要查看的唯一數據是客戶端的第一行HTTP CONNECT命令。

+0

EJP,謝謝 我知道複製字節,但是:gzipip數據將導致'download as octetstream'消息 複製'壓縮數據'和'未壓縮的數據'? (我正在使用ASCIIENcoding:是這個問題嗎?) –

+0

EJP,你的意思是傳遞字節到套接字嗎?它不會像預期的那樣工作 –

+0

@JeroenBokier沒有區別在應對數據和複製數據之間,數據包括頭部和請求體,頭部說什麼或者身體如何編碼都沒有關係,只需複製字節,就不會出錯,如果出錯,你不是這樣做的。 – EJP

0

對我來說,解決方案是關閉Fiddler。