Ver Mensaje Individual
  #1  
Antiguo 14-12-2007
AFilth AFilth is offline
Miembro
 
Registrado: ago 2005
Posts: 119
Reputación: 19
AFilth Va por buen camino
Problema con TIdTcpServer y TIdTcpClient de las Indy...

Buenos días a todos,

os cuento, estoy intentando desarrollar una aplicación en la cual, por una lado tenemos un servidor implementado con el componente TIdTcpServer de las Indy y el resto son clientes que tienen el TIdTcpClient de las indy también.

Para realizarlo, me he fijado en el ejemplo de las Indy del chat, el cual tiene el mismo esqueleto.

Cuando yo abro comunicación entre un cliente y el servidor todo funciona bien, los datos llegan del cliente al servidor y la respuesta del servidor al cliente.

El problema es el siguiente, yo quiero en determinados momentos, mandar mensajes del servidor al cliente sin que éste me haga ningún tipo de petición. Para lograr ésto, tengo una lista de los clientes con sus TIdPeerThread guardados para luego poder comunicarme con ellos por el "canal de comunicación" que éste me abrió cuando se conectó.

Para ello, pongo un Timer en el cliente y cada medio segundo en el timer hago lo siguiente:
Código Delphi [-]
procedure TForm2.TimerTimer(Sender: TObject);
var
  Msg: String;
begin
  //Cada cierto tiempo tendremos que estar mirando si nos llega algo del servidor
  if not IdTcpClient.Connected then
    exit;

  Msg := IdTCPClient.ReadLn('', 5);  //El 5 es un timeout para que no se quede ahí anclado siempre
  if Msg <> '' then
    MemoLog.Lines.Add(Msg);
end;

Pues no me funciona...(el ejemplo de ls Indy tampoco )
El problema está en la línea
Código Delphi [-]
Msg := IdTCPClient.ReadLn('', 5);
Se me queda ahí parado el cliente sin hacer caso al timeout.
Si fuerzo enviar un mensaje desde el servidor, éste llega con datos y el cliente lo lee y sigue adelante pero como a los 0,5 seg vuelve a entrar en el timer sucede lo mismo...

Porqué no funciona el timeout? como debería hacerlo??

Un saludo y muchas gracias.
Responder Con Cita