Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Internet
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-05-2006
liadsoft liadsoft is offline
Miembro
 
Registrado: may 2006
Posts: 12
Poder: 0
liadsoft Va por buen camino
Question Problema con TIdTCPClient

Bueno, yo hice un proxy utilizando el TIdTCPClient para conectarme con la página que me pedía el explorador a través de un TIdTCPServer.

El problema que tengo es el siguiente. En el encabezado que me devuelve la página, muchas veces me dice el Content-Length, en tal caso yo leo de kilobyte en kilo desde el TIdTCPClient hasta llegar a la longitud dada (por supuesto que leo el mod que me queda {resto}). Pero cuando la página no me envía la longitud del cuerpo del mensage tengo que leer hasta que se desconecte.

Pero el problema, es que como es una aplicación que va a estar en la misma máquina donde está el Browser, no puedo bajar todo el archivo y después enviarselo al Internet Explorer, por ejemplo, porque si no este pincha un poco lento y eso. Entonces, en ese caso leo byte a byte con ReadString(1), un byte en este caso. Pero no s[e por qué el componente después de leer todos los bytes, se queda en la función y no vuelve, trabandome el Thread con el que estoy trabajando.

Ya, antes de leer el byte le pongo que compruebe si está conectado o no, pero aun así sigue trabandose. Pleas, si alguien me puede ayudar....
Responder Con Cita
  #2  
Antiguo 11-05-2006
Avatar de waltergomez
waltergomez waltergomez is offline
Miembro
 
Registrado: may 2006
Posts: 202
Poder: 18
waltergomez Va por buen camino
Si pones el codigo que usas es mas facil darte una mano.

Saludos,
Responder Con Cita
  #3  
Antiguo 12-05-2006
liadsoft liadsoft is offline
Miembro
 
Registrado: may 2006
Posts: 12
Poder: 0
liadsoft Va por buen camino
Código

Cita:
Empezado por waltergomez
Si pones el codigo que usas es mas facil darte una mano.

Saludos,
Primero le asigno a la instancia del TIdTCPServer, en el evento OnConnect el procedimiento ProxServConnect. Cada vez que algún programa se conecte al servidor por el puerto en el que está escuchando, se ejecutará ese procediemiento.

Al procedimiento se le pasa el objeto AThread del tipo TIdPeerThread.

Al conectarse algún programa, leo el header del request:

str:=AThread.Connection.ReadLn(#13#10#13#10,5000);

En el procedimiento creo al objeto que va a conectarse a la página pedida

var
Client: TIdTCPClient

(...)

Client:=TIdTCPClient.Create(nil);

Luego envío el request, que si tiene cuerpo, también lo envío.

Después, leo el header (encabezado) de la repuesto

str:=Client.ReadLn(#13#10#13#10,15000);

Con una función obtengo si existe el campo Content-Length y si es así la función me devuelve la longitud del cuerpo del mensage:

l:=GetContentLength(str);

If l>0 then begin
//Aquí no hay problema
end else begin
//Aquí es el problema

repeat
Client.CheckForDisconnect(false);
If not Client.Connected then Break;

//Aquí es donde se queda trabado
str:=Client.ReadString(1);

repeat try
AThread.Connection.Write(str);
blRepeat:=false;

except
blRepeat:=false;
AThread.Connection.CheckforDisconnect;
If not ATHread.Connection.Connected then raise;
end;
until not blRepeat;

until not Client.Connected;

end;


Bueno, espero que me puedan ayudar. Gracias por todo.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 17:38:17.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi