PING «threaded» usando ICMP.DLL
Hay muchas formas de implementar un PING. Una de ellas es utilizando la librería ICMP.DLL (Internet Control Message Protocol).
Basándome en la Unit Ping.pas que utiliza esta librería extraída de delphi-Central, he creado un ejemplo que la utiliza combinando las llamadas con Threads.
La unit Ping.pas se puede descargar desde la página anterior o desde aquí (raw_ping). El ejemplo crea una clase llamada TPingThread con la siguiente estructura:
TPingThread = class(TThread) private mmResult:TMemo; protected procedure Execute; override; procedure UpdateResult; public PingResult:TPingResult; Ready:Boolean; constructor Create(Ping:TPingResult); end; |
En este caso hemos añadido un TMemo para poder usarlo en la sincronización y mostrar los resultados, aunque no seía necesario (sólo para mostrarlos en este ejemplo), ya que los resultados realmente se alamacenan en la variable PingResult.
El thread utiliza el procedimiento IcmpSendEcho para realiza el Ping.
Se puede descargar el código fuente y los binarios compilados con Delphi 6:
<CODIGO FUENTE>
<BINARIO>
Se puede comparar este con un ejemplo similar realizado sin threads.
<DESCARGAR BINARIO>
Embarcadero MVP.
Analista y Programador de Sistemas Informáticos.
Estudios de Informática (Ingeniería Técnica Superior) en la UPC (Universidad Politécnica de Barcelona).
Llevo utilizando Delphi desde su versión 3. Especialista en diseño de componentes, Bases de Datos, Frameworks de Persistencia, Integración Continua, Desarrollo móvil,…
He modificado tu ejemplo para delphi 2010 y me funciono bien. Lo queria publicar aqui pero la verdad no se si se pueda.
solo cambie este procedimiento (las variables String y char por ansiString y AnsiChar)
Hola Edgar.
Muchas gracias por el comentario y la publicación (que por supuesto puedes hacer). Me he permitido añadir Tag’s al texto para que te reconozca el código y lo pinte como tal.
Un saludo.
Hola, he probado el ejemplo compilado con Delphi XE bajo Windows 7 Pro 32 bit y no he logrado que funcione correctamente, ¿alguna idea al respecto o será compatibilidad?
Gracias.
@J. Young
Hola.
Pues no lo he probado, pero habría que saber qué error te está dando.
Un saludo.