2010-04-12 66 views
3

我正在使用.NET和C#編寫代理。 我還沒有做過太多的Socket編程,我不確定最好的方法來解決它。 執行此操作的最佳方法是什麼? 我應該使用同步套接字,異步套接字嗎?請幫忙!使用套接字的C#代理,我應該怎麼做?

它必須...

  • 接受 兩個不同的端口從客戶端的連接,並能夠 收到的 同時兩個端口的數據。
  • 在兩個不同的端口上連接到服務器,並且能夠同時在兩個端口上發送數據。

  • 立即連接到服務器,並在客戶端連接立即開始轉發數據包。

  • 按照收到的順序轉發數據包。

  • 儘可能延遲。

  • 我不需要多 客戶端連接到代理服務器的能力,但它 將是一個不錯的功能,如果它很容易 實現。

客戶--------- -------代理服務器
--- | ---------------- - | ---------------- |
端口< -------->端口< ------->端口
端口< -------->端口< ------->端口

+0

你可以限制你的代碼到Windows Server 2008上運行? – 2010-04-12 09:31:53

+0

不,它必須至少在Windows 7上運行。 – Kin 2010-04-12 10:20:29

回答

3

我以前用this source code做過修飾。它做得很好,推薦。

+0

這很容易遵循,謝謝!它不是用3.5編譯的,而且已經很老了。有什麼具體的我應該避免做的(過時的,或更好的方式),在這裏使用? – Kin 2010-04-12 15:48:53

+1

@kin - 編譯問題很容易通過編譯爲.NET 1.1(未嘗試)或通過在有問題的Math.Floor中將表達式轉換爲double來修復。 – Frederik 2014-08-07 21:12:06

+0

地址編譯器問題:使用BitConverter。ToInt64(IP.GetAddressBytes(),0)與IP.Address。 – 2015-09-15 23:53:45

1

請檢查出PortFusion!它是一個完整的,積極使用和開發的分佈式反向代理解決方案,用於全部基於TCP的流量。它是爲.NET 4.0編寫的,並附帶完整的源代碼。

我測試了.NET 3.5中引入的ReceiveAsync和SendAsync方法,但未發現它們的吞吐量與同步吞吐量一樣高 - 異步應用在大量併發客戶端時應該擴展得更好。

爲控制客戶數量最大吞吐量:使用同步方法 到達最大併發連接數:異步