Indy Client/Server - bonito colapso
Publicado por APC (1 intervención) el 07/05/2005 18:30:07
Salu2, tengo 2 programas hechos bajo Delphi6, utilizo componentes indy para comunicarlos a través de Internet, el programa servidor identifica la petición del cliente y realiza cierta búsqueda en una base de datos (Interbase 6) y posteriormente envia una respuesta al programa cliente, en un principio todo marchó bien, logré establecer comunicación (enviaba peticiones y recibía respuesta) todo esto con un solo cliente, al momento de conectar 3 clientes más, todo parecía marchar bien pero n el momento que 2 o más clientes hacen una petición de forma simultanea al Serverocket, el progama servidor no responde, perdiéndose cualquier comunicación con los clientes, en mi caso es muy importante mantener constante comunicación con el prg. servidor.
En el prg. servidor tengo al así en el evento Onexecute del socket
begin
with AThread.Connection do
begin
msj:= readln; //Msj = variable global
// Aquí realizo una búsqueda en varias tableas Interbase
// y obtengo, respuesta:= resultado de la búsqueda;
writeLn(respuesta);
disconnect
end
end;
y en los clientes
procedure Tform1.Envia;
begin
try
idTCPclient.Connect;
except
ShowMessage('Conexión fallida');
exit;
end;
idTCPclient.WriteLn(msj); //msj es una variable global
with idTCPClient do
begin
try
msjret:= ReadLn; // msj es una variable global
finally
Disconnect
end
end;
end;
Es primera vez quet trabajo con este tipo de componentes y no sé que esté haciendo mal, o que debería o no hacer, cualquier ayuda o comentario podría ser de mucha utilidad, me urge resolver este conflicto, de ante mano gracias..
En el prg. servidor tengo al así en el evento Onexecute del socket
begin
with AThread.Connection do
begin
msj:= readln; //Msj = variable global
// Aquí realizo una búsqueda en varias tableas Interbase
// y obtengo, respuesta:= resultado de la búsqueda;
writeLn(respuesta);
disconnect
end
end;
y en los clientes
procedure Tform1.Envia;
begin
try
idTCPclient.Connect;
except
ShowMessage('Conexión fallida');
exit;
end;
idTCPclient.WriteLn(msj); //msj es una variable global
with idTCPClient do
begin
try
msjret:= ReadLn; // msj es una variable global
finally
Disconnect
end
end;
end;
Es primera vez quet trabajo con este tipo de componentes y no sé que esté haciendo mal, o que debería o no hacer, cualquier ayuda o comentario podría ser de mucha utilidad, me urge resolver este conflicto, de ante mano gracias..
Valora esta pregunta
0