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
if not IdTcpClient.Connected then
exit;
Msg := IdTCPClient.ReadLn('', 5); 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.