2010-11-09 94 views
14

我是Indy的新手,我想用它構建一個簡單的代理服務器。這是一個相當大的圖書館,我只是不知道從哪裏開始。當客戶端連接到服務器時,OnExucute觸發並接收客戶端連接作爲參數(AContext.Connection)。使用Indy的代理服務器

我想要做如下:

[client connection] := AContext.Connection 
read host/port from [client connection] 
[remote connection] := connect to host/port 
while both connections alive: 
    if data available in [client connection]: 
    read data from [client connection] 
    write data to [remote connection] 
    if data available in [remote connection]: 
    read data from [remote connection] 
    write data to [client connection] 

問題是什麼功能,我應該使用嗎? Connection對象中有IOHandler屬性,其中有大量屬性。請幫忙。

我正在使用Delphi2010附帶的Indy。

回答

19

Indy擁有自己的代理組件,可以滿足您的要求。看看TIdMappedPortTCPTIdHTTPProxyServer組件作爲出發地。

TIdMappedPortTCP是一個通用代理,只是來回傳遞原始數據。您可以使用其OnConnect事件來動態配置該連接的目標主機/端口(例如通過從客戶端讀取),或者可以爲所有連接靜態設置其屬性MappedHostMappedPort。如果需要,您可以使用其OnExecuteOnOutboundData事件修改通過代理的數據。

TIdHTTPProxyServer僅用於基於HTTP的代理,其中,所述客戶端使用HTTP GETPOSTHEAD,和CONNECT動詞,指定絕對URL到目標主機/端口的專用代理,然後通過HTTP標頭和數據備份(CONNECT通常用於通過防火牆代理SSL/TLS連接)。

+6

真是明智的建議,謝謝!這兩個組件的來源都非常有用。如果有人有興趣,最後我帶着類似的東西:http://pastebin.com/ixt2gssD – Frantic 2010-11-10 08:51:44

+0

你在pastebin上的代碼保存了我的一天。感謝瘋狂。 – 2011-12-08 15:59:12