2010-11-09 21 views
14

Ich bin neu in Indy und ich möchte einen einfachen Proxy-Server damit bauen. Das ist eine ziemlich große Bibliothek, und ich weiß einfach nicht, wo ich anfangen soll. Wenn der Client eine Verbindung zum Server herstellt, wird OnExucute gestartet und empfängt die Clientverbindung als Parameter (AContext.Connection).Proxy-Server mit Indy

Ich möchte folgendes tun:

[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] 

Die Frage, welche Funktionen ist, soll ich dafür verwenden? Es gibt eine Eigenschaft im Verbindungsobjekt mit Tonnen von ihnen. Bitte, helfen Sie.

Ich verwende Indy, die mit Delphi2010 geliefert wird.

Antwort

19

Indy hat seine eigenen Proxy-Komponenten, die tun, was Sie verlangen. Betrachten Sie die TIdMappedPortTCP und TIdHTTPProxyServer Komponenten als Startplätze.

TIdMappedPortTCP ist ein Allzweck-Proxy, der nur Rohdaten hin- und hergibt. Sie können das Ereignis OnConnect verwenden, um den Zielhost/-anschluss für diese Verbindung dynamisch zu konfigurieren (z. B. durch Lesen vom Client), oder Sie können die Eigenschaften und MappedPort statisch für alle Verbindungen festlegen. Sie können die Ereignisse OnExecute und OnOutboundData verwenden, um Daten zu ändern, wenn sie den Proxy bei Bedarf passieren. nur

TIdHTTPProxyServer ist eine spezialisierte Proxy für HTTP-basierten Proxy, wo der Client verwendet die HTTP GET, POST, HEAD und CONNECT Verben, absolute URLs an den Ziel-Host/Port spezifiziert, und übergibt dann die HTTP-Header und Daten zurück und weiter nach Bedarf (CONNECT wird häufig für die Proxy-Verarbeitung einer SSL/TLS-Verbindung über eine Firewall verwendet).

+6

Wirklich weiser Rat, danke! Die Quellen beider Komponenten sind sehr nützlich. Wenn jemand interessiert ist, kam ich schließlich mit so etwas: http://pastebin.com/ixt2gssD – Frantic

+0

Dein Code auf Pastebin speicherte meinen Tag. Danke, Frantic. –