Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 14-12-2007
AFilth AFilth is offline
Miembro
 
Registrado: ago 2005
Posts: 119
Poder: 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
  #2  
Antiguo 14-12-2007
JXJ JXJ is offline
Miembro
 
Registrado: abr 2005
Posts: 2.475
Poder: 22
JXJ Va por buen camino
encierra tu codigo dentro de un bloque try
para saber que error sale, aun no se como usar el bloque try except
pero es algo como abajo

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;

try
  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;
except
end
Responder Con Cita
  #3  
Antiguo 14-12-2007
AFilth AFilth is offline
Miembro
 
Registrado: ago 2005
Posts: 119
Poder: 19
AFilth Va por buen camino
Creo que no me has entendido bien...el problema no es por no usar el try except, que por cierto eso...eso de poner try y no poner nada en el except...ufff.

El problema viene de que no se está haciendo caso al timeout del readln.

A alguien se le ocurre algo? Como trabajais cuando haceis una aplicación cliente/servidor?

Salu2.
Responder Con Cita
  #4  
Antiguo 15-12-2007
AFilth AFilth is offline
Miembro
 
Registrado: ago 2005
Posts: 119
Poder: 19
AFilth Va por buen camino
Nadie usa estos componentes de las indy??
Responder Con Cita
  #5  
Antiguo 15-12-2007
JXJ JXJ is offline
Miembro
 
Registrado: abr 2005
Posts: 2.475
Poder: 22
JXJ Va por buen camino
a mi me ayudo usar el componente eureka
en algunos errores, raros me llego un mensaje de invalid handler

que version de las indys, estas usando la 9 de delphi 7 a alguna de
las versiones 10.x
o la 10.1.5 que viene con el IDE delphi 2005, 2006, 2007
Responder Con Cita
  #6  
Antiguo 17-12-2007
AFilth AFilth is offline
Miembro
 
Registrado: ago 2005
Posts: 119
Poder: 19
AFilth Va por buen camino
Estoy usando la versión 9 de las indy con Delphi 7. Si algún moderador ve este hilo me lo podría mover al foro de internet que creo que sería más apropiado...

PD: No me dí cuenta de que debería haberlo puesto allí al principio...
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
TIdTCPServer, TIdTCPClient y mala conexión Val Internet 2 21-06-2014 22:52:24
Ayuda con TidTCPClient y TidTCPServer vejerf Internet 10 24-05-2007 16:47:58
TidTcpServer,TidTcpClient nenufer Internet 11 14-06-2006 12:17:04
Escuchar con TIdTCPServer (indy), por varios IP en una misma maquina fabianbbg Internet 1 31-01-2006 01:27:04
Urgente tidTcpServer Indy Pally Internet 2 30-08-2003 01:01:11


La franja horaria es GMT +2. Ahora son las 15:50:52.


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