Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   como hacer un ping.... (https://www.clubdelphi.com/foros/showthread.php?t=19755)

killaton 24-03-2005 16:39:51

como hacer un ping....
 
Hola gente ....:D

Ante todo muchas gracias por su voluntad y como decimos por aqui por su buena onda...

He encontra do por ahi el codigo para realizar un PING en tiempo de ejecucion desde Delphi y saber de esta manera si el host a pinguear esta encendigo (que es en definitiva lo que necesito saber).

El problema es que por alguna razon no funciona.... por ejemplo.

1- Si el Host existe ? la linea Ping.ReplyStatus.BytesReceived devuelve 0.
y por lo poco que entiendo si existe deberia devolverme un entero mayor a 0.:confused:
2- Si el HOST no existe? me da un error SOCKET error #110001 Host not found.:(
hay forma de evitar este error y que me permita seguir el funcionamiento de mi aplicativo?

Les paso el codigo....

var

Ping:TIdIcmpClient;
rango,direcciones:String;
seccion,I:integer;

begin

Rango := InputBox('Ingrese la IP a realizar el PING...','Direccion IP','');

Ping := TIdIcmpClient.Create(nil);

Ping.BufferSize :=8192;

Ping.ReceiveTimeout := 200;

Showmessage('Procesando... La tarea puede tardar unos minutos');


Ping.Host := Rango;


Showmessage('Probando con '+Ping.Host);

Ping.Ping;

Ping.Receive(500);

showmessage(inttostr(Ping.ReplyStatus.BytesReceived));

showmessage(inttostr(Ping.TTL));

If Ping.ReplyStatus.BytesReceived <> 0 Then
begin


Showmessage(' - Respuesta de: '+Ping.ReplyStatus.FromIpAddress);

Showmessage(' >> Bytes recibidos: '+IntToStr(Ping.ReplyStatus.BytesReceived));

Direcciones := Direcciones +' - '+Ping.ReplyStatus.FromIpAddress;
end;


Showmessage(Direcciones);


Showmessage('Pulse ENTER para salir');

Ping.Destroy;

end;

desde ya mil gracias por todo... a quienes puedan darme una mano.

roman 24-03-2005 17:03:12

Cita:

Empezado por killaton
Si el HOST no existe? me da un error SOCKET error #110001 Host not found.
hay forma de evitar este error y que me permita seguir el funcionamiento de mi aplicativo?

Aunque no conozco mucho de esto, me parece que es este error precisamente el que debes manejar para saber si el servidor destino es accesible. Envuelve la llamada a Ping.Ping en un bloque try-except:

Código Delphi [-]
try
  Ping.Ping;
  
  {
    Si el servidor es accesible el flujo continúa aquí
  }
except
  {
    si el servidor no es accesible el flujo continúa aquí ya sin presentarte
    el mensaje. Aquí haces lo que corresponda al caso e incluso puedes
    mostrar tu propio mensaje.
  }
end;

Lo mejor es usar una cláusula on en la parte except para estar seguro de que el flujo cambia a esa parte debido a ese error (podria haber otro tipo de error):

Código Delphi [-]
try
  Ping.Ping;
except
  on ESocketError do
    { Aquí manejas el error }
end;

El nombre correcto de la excepción (ESocketError) no sé cuál es pero basta que pongas el que te marca al momento de lanzarte la excepción.

// Saludos

killaton 25-03-2005 00:06:02

Hola Roman....

como siempre gracias por tu respuesta...

ahora..... he probado con try-except y el problema se presenta en que no llega al except y tira el error en el ping.ping :confused:

roman 25-03-2005 01:51:30

Bueno, pues entonces lo más recomendable es estudiar el ejemplo que viene con las Indy ;) . En la carpeta IndyDemos viene la demo PingGUI que usa un IdIcmpClient. Lo acabo de probar y trabaja bien tanto con direcciones que sí responden como con las que no.

// Saludos

roman 25-03-2005 01:57:59

Por cierto killaton, éste es ya el tercer mensaje que colocas en el foro DelphiPack que no es el adecuado.

Muevo este al foro Internet.

// Saludos

killaton 25-03-2005 15:38:14

Hola Roman...

nuevamente gracias por tu respuesta. Tengo un unico problema . No se porque, no tengo los Demos de indy. Pero ya lo estare banjando.

Respecto a la publicacion de los mensajes. Juro pensar que los temas relacionados a Delphi, debian ser publicados en Delphi Pack 2. Te pido mil disculpas Roman pero no fue con mala intencion.
Solamente un mensaje de SQL por error lo publique en Delphi Pack, por colgado que soy , nada mas....:D

Ahora quisiera saber en que foro publicar los hilos correspondiente a Delphi, para no seguir comentiendo errores.

Te doy las gracias por avisarme, y nuevamente mil disculpas, pues estaba convencido de estar haciendo las cosas bien....

roman 25-03-2005 16:07:04

Cita:

Empezado por killaton
Tengo un unico problema . No se porque, no tengo los Demos de indy.

Creo que lasIndy que vienen con Delphi no incluyen los demos pero te puedes bajar los demos y las versiones más recientes de las componentes la página del projecto Indy. Yo uso la versión 9


Cita:

Empezado por killaton
Ahora quisiera saber en que foro publicar los hilos correspondiente a Delphi, para no seguir comentiendo errores.

Te doy las gracias por avisarme, y nuevamente mil disculpas, pues estaba convencido de estar haciendo las cosas bien....

No te preocupes.

La mayoría de los foros del Club están dedicados a Delphi así que tienes que escoger el más apropiado para el tema de la pregunta. Lee la descripción que aparece en el listado de los foros. Los temas que no correspondan a ningún foro en particular colócalos en el de Varios.

// Saludos

killaton 25-03-2005 16:41:47

Hola Roman...

Gracias por la aclaracion y tu buena predisposicion.

Espero no volver a cometer errores, ni causar molestias.;)

He bajado los ejemplos de INDY. y como tu lo has dicho el demo PINGUI. funciona perfectamente. Salvo, que desearia evitar el ESOCKET ERROR # 11004, y cambiar lo por uno de usuario (osea un mensaje mio) para que no cancele el procedimiento y seguir como yo desee.:)

Tienes idea como hacerlo.?

Gracias nuevamente

killaton 26-03-2005 20:21:10

Para todos los que se pasen las horas buscando resolver el problema citado ?

no olvidar incluir en...

uses
idException ;)

de esta forma... utilizando try... except el errorSocket saldra por el except :D

por ejemplo

try
ICMP.Ping;
except
showmessage('no se pudo realizar el ping');
// continuo con mi aplicacion.
end;

salu2....


La franja horaria es GMT +2. Ahora son las 19:10:18.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi