2010-11-09 7 views
14

Sono nuovo di Indy e voglio creare un semplice server proxy con esso. Questa è una biblioteca abbastanza grande, e io non so da dove cominciare. Quando il client si connette al server, OnExucute si attiva e riceve la connessione client come parametro (AContext.Connection).Server proxy utilizzando Indy

voglio fare seguente:

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

La domanda è: quali funzioni è necessario utilizzare per questo? C'è una proprietà IOHandler nell'oggetto Connection con tonnellate di essi. Per favore aiuto.

Sto utilizzando Indy fornito con Delphi2010.

risposta

19

Indy ha i propri componenti proxy che fanno ciò che si richiede. Guarda i componenti TIdMappedPortTCP e TIdHTTPProxyServer come punti di partenza.

TIdMappedPortTCP è un proxy generico che passa solo i dati grezzi avanti e indietro. È possibile utilizzare l'evento OnConnect per configurare dinamicamente l'host/porta di destinazione per quella connessione (ad esempio leggendolo dal client) oppure è possibile impostare staticamente le proprietà MappedHost e MappedPort per tutte le connessioni. È possibile utilizzare gli eventi OnExecute e OnOutboundData per modificare i dati mentre passa attraverso il proxy, se necessario.

TIdHTTPProxyServer è un proxy specializzato solo per l'inoltro basata su HTTP, in cui il cliente utilizza il HTTP GET, POST, HEAD, e CONNECT verbi, specificando URL assoluti al target host/port, e poi passa le intestazioni HTTP e dati retrospettivi e avanti secondo necessità (CONNECT è comunemente usato per il proxy di una connessione SSL/TLS attraverso un firewall).

+6

Consiglio davvero saggio, grazie! Le fonti di entrambe le componenti sono molto utili. Se qualcuno è interessato, finalmente sono arrivato con qualcosa del genere: http://pastebin.com/ixt2gssD – Frantic

+0

Il tuo codice su pastebin ha salvato la mia giornata. Grazie Frantic. –