PDA

Ver la Versión Completa : Problemas con INDY


m@kio
16-06-2005, 19:35:13
Estoy haciendo una aplicacion la cual se conecta a un servidor k yo hice, los hago con TidTCPClient y TidTCPServer, al inciar la aplicacion on el oncreate me conecto de la sig. forma:

with datos do
begin
if cliente.Connected then
Application.MessageBox('Actualmente conectado con el servidor','Aviso',mb_ok+mb_iconinformation)
else
begin
try
cliente.Connect;
except
Application.MessageBox('No se ha podido conectar con el servidor','Aviso',mb_ok+mb_iconwarning);
application.Terminate;
end;
end;
Cliente.WriteLn(inttostr(0));
hora:=cliente.ReadLn;
DecodeTime(strtotime(hora), Hour, Min, Sec, MSec);
Cliente.WriteLn(inttostr(1));
fecha:=cliente.ReadLn;
end;


eso si me lo hace bien.

Pero en otra forma que es un checador en el evento OnActivate vuelvo a pedir los mismos datos el servidor de la sig. forma:

with datos do
begin
if cliente.Connected=false then
Application.MessageBox('No hay conexion con el servidor','Aviso',mb_ok+mb_iconinformation)
else
begin
Cliente.WriteLn(inttostr(0));
hora:=cliente.ReadLn;
DecodeTime(strtotime(hora), Hour, Min, Sec, MSec);
Cliente.WriteLn(inttostr(1));
fecha:=cliente.ReadLn;
end;
end;


pero en la linea hora:=cliente.ReadLn; se traba y ya no hace nada yo no le veo nada raro al codigo, pero no lo he podido reparar, espero y me puedan ayudar.

El TidTCPClient lo tengo en un DataModule.

Crandel
17-06-2005, 07:59:01
Puede estar ocurriendo que el servidor no te conteste la segunda vez.

Si no lo hace queda esperando una respuesta y por eso se te traba

Suerte

jachguate
17-06-2005, 15:45:27
Lo que ha dicho crandel es correcto, habrá que ver el flujo y algo de código en el server.

Hasta luego.

;)

m@kio
17-06-2005, 16:03:25
Por el momento lo soluciones poniendo un TidTCPClient en cada forma k lo vaya a utilizar, pero yo solamente kiero tener uno en el DataModule y con ese mandar pedir la informacion, como puedo saber si el servidor espera una respuesta? o como puedo cancelar esa peticion para hacer otra?

jachguate
17-06-2005, 17:39:11
como puedo saber si el servidor espera una respuesta?
habrá que ver el flujo y algo de código en el server.

Creí que ya habia queado claro... :confused:

Crandel
18-06-2005, 04:50:27
Todos los programas cliente servidor, son como una conversación.

Donde cada uno hace una pregunta (dado un codigo y sus paramentros) y el otro interpreta esa pregunta (por su codigo) y devuelve la respuesta.

Ahora, el primero, recibe la respuesta y ejecuta la acción que desee.

Ese es el hilo principal de todos los programas.


como puedo saber si el servidor espera una respuesta?

Depende completamente de tu proceso.

Si escribes el codigo de la conversación podremos analizarlo y sugerirte algo.

m@kio
20-06-2005, 15:58:28
Servidor:

Cuando se Conecta;


AThread.Connection.WriteLn(timetostr(now));
listbox2.Items.Insert(0,Athread.Connection.ReadLn);


Cuando se ejecuta:


procedure TForm1.ServidorExecute(AThread: TIdPeerThread);
var
Command : String;
begin
listbox1.Items.Insert(0,Athread.Connection.ReadLn+'- Hora de Ejecucion: '+FormatDateTime('hh:nn:ss',now));
Command := AThread.Connection.ReadLn;
if command='0' then
AThread.Connection.WriteLn(FormatDateTime('hh:nn:ss',now))
else if command='1' then
AThread.Connection.WriteLn(FormatDateTime('dd/mm/yyyy',date))
else if command='2' then
AThread.Connection.WriteLn('HOLA cliente como estas');

end;


Lo del cliente ya puse como me conecto y como hago la petición al servidor, espero que me pueda ayudar...