Ver Mensaje Individual
  #6  
Antiguo 23-11-2011
jesconsa jesconsa is offline
Miembro
 
Registrado: dic 2009
Posts: 30
Reputación: 0
jesconsa Va por buen camino
Perdon, ICMP.DLL no es raw sockets. Una pregunta por si alguien me da alguna pista. LLevo algunos dias con IcmpClient de Indy y todo va bien, o casi. Lo que hago es una llamada en bucle para crear threads para hacer pings a equipos. No he reinventado la rueda sino que he estado mirando una rutina en Internet de alguien que ya la hizo. la rutina del ejecutable del Thread es la siguiente:


procedure TPingThread.Execute;
var
rp:TReplyStatus;
begin
FErrorCount := 0;
FAlarmed := false;

Ping := TIdIcmpClient.Create(nil);
Ping.FreeOnRelease;
Ping.Host := FHost;

Ping.PacketSize:=16;
Ping.OnReply := PingReply;
Ping.ReceiveTimeout := 1000;


try
// Lanzar el PING
Ping.Ping;
finally
FreeAndNil(Ping);
end;

end;


procedure TPingThread.PingReply(ASender: TComponent; const AReplyStatus: TReplyStatus);
begin

if (AReplyStatus.ReplyStatusType = rsTimeOut) or (AReplyStatus.ReplyStatusType = rsErrorUnreachable) then begin
Form1.Memo1.Lines.Add('Equipo caido.');
end else begin
Form1.Memo1.Lines.Add('Equipo OK');
end;

end;


Si comienzo el thread con Resume o Start para dos equipos (dos threads) resulta que si el primero tiene conexion y el segundo no, lo muestra bien en el Memo ,...pero si el primero NO tiene conexion y el segundo si, en el Memo se ve como el segundo da su mensaje de 'Equipo OK' y al llegar el Reply del primero (Timeout) me aparece tambien 'Equipo OK' como si fuera el otro equipo, es decir, cuando llega el timeout de uno es como si los Threads no estuvieran bien difrenciados y toma los datos del ultimo Thread que se ejecuto.......He probado con Synchronize y este tipo de cosas pero no he funcionado....

Alguna pista please?

Muchas gracias
Jesus
Responder Con Cita