2013-05-28 110 views
0

我試圖用c#創建一個透明代理。我能夠將我的網絡流量轉移到我的代理客戶端,並將其重定向到我的代理服務器。它的工作,但我有2個問題,代理套接字管理

1 - 它很慢,最大速度是60kbps,這是我如何我的服務器和代理客戶

while (SocketConnected(tcp_link.Client) && 
     SocketConnected(_tcp.Client) && 
     !ioError) 
{ 
    try 
    { 
     Thread.Sleep(1); 
     if (streamLink.DataAvailable) 
     { 
      byte[] l_buffer = new byte[4096]; 
      int l_read = streamLink.Read(l_buffer, 0, l_buffer.Length); 
      byte[] l_data = new byte[l_read]; 
      Array.Copy(l_buffer, l_data, l_data.Length); 

      byte[] l_send = MBR.reverse(l_data); 

      _stream.Write(l_send, 0, l_send.Length); 
     } 

     if (_stream.DataAvailable) 
     { 
      byte[] c_buffer = new byte[4596]; 
      int c_read = _stream.Read(c_buffer, 0, c_buffer.Length); 
      byte[] c_data = new byte[c_read]; 
      Array.Copy(c_buffer, c_data, c_data.Length); 

      byte[] c_send = MBR.reverse(c_data); 

      streamLink.Write(c_send, 0, c_send.Length); 
     } 
    } 
    catch (Exception ex) 
    { 
     onErrorLog(this, new ErrorLogEventArgs(ex)); 
     ioError = true; 
    } 
} 

我的其他問題之間傳送業務:當我應該關閉我的套接字?哪一個應該先關閉?是http服務器將關閉與我的代理服務器連接或我應該斷開連接?

對不起我的背英語

+0

是否有原因您沒有使用[Socket類]的Begin ...和End ...模式(http://msdn.microsoft.com/zh-cn/library/600stss7.aspx) ?如果你重構那些你可以擺脫Thread.Sleep(1)造成延遲的反正。 – rene

+0

我也是這樣做的,速度沒有變化甚至更糟 –

回答

1

我認爲這不是僅僅用一個邏輯問題,而是有關處理並行。我已經使用SocketAsyncEventArgs來實現高性能異步TCP服務器,並且它閃耀着。

可以找到一篇好文章here