2010-11-09 28 views
14

Soy nuevo en Indy y quiero construir un servidor proxy simple con él. Esta es una biblioteca bastante grande, y simplemente no sé por dónde empezar. Cuando el cliente se conecta al servidor, OnExucute se activa y recibe la conexión del cliente como parámetro (AContext.Connection).Servidor Proxy usando Indy

Quiero hacer lo siguiente:

[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 pregunta es ¿qué funciones debería utilizar para que? Hay IOHandler propiedad en objeto de conexión con toneladas de ellos. Por favor ayuda.

Estoy usando Indy que se envía con Delphi2010.

Respuesta

19

Indy tiene sus propios componentes proxy que hacen lo que está pidiendo. Mire los componentes TIdMappedPortTCP y TIdHTTPProxyServer como lugares de partida.

TIdMappedPortTCP es un proxy de propósito general que simplemente pasa datos sin procesar hacia adelante y hacia atrás. Puede usar su evento OnConnect para configurar dinámicamente el host/puerto de destino para esa conexión (por ejemplo, leyéndolo desde el cliente), o puede establecer sus propiedades MappedHost y MappedPort estáticamente para todas las conexiones. Puede usar sus eventos OnExecute y OnOutboundData para modificar los datos a medida que pasan a través del proxy, si es necesario.

TIdHTTPProxyServer es un proxy especializado sólo para proxy basado en HTTP, donde el cliente utiliza el HTTP GET, POST, HEAD, y CONNECT verbos, especificando las direcciones URL absolutas para el host de destino/Puerto, y luego pasa HTTP encabezados y datos de espalda y según sea necesario (CONNECT se usa comúnmente para transmitir una conexión SSL/TLS a través de un firewall).

+6

Consejos realmente sabios, gracias! Las fuentes de ambos componentes son muy útiles. Si alguien está interesado, finalmente vine con algo así: http://pastebin.com/ixt2gssD – Frantic

+0

Tu código en pastebin me salvó el día. Gracias Frantic. –