Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Internet
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Tema Cerrado
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 24-03-2005
killaton killaton is offline
Miembro
 
Registrado: mar 2005
Ubicación: Argentina
Posts: 14
Poder: 0
killaton Va por buen camino
Exclamation como hacer un ping....

Hola gente ....

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.
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.
  #2  
Antiguo 24-03-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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
  #3  
Antiguo 25-03-2005
killaton killaton is offline
Miembro
 
Registrado: mar 2005
Ubicación: Argentina
Posts: 14
Poder: 0
killaton Va por buen camino
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
  #4  
Antiguo 25-03-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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
  #5  
Antiguo 25-03-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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
  #6  
Antiguo 25-03-2005
killaton killaton is offline
Miembro
 
Registrado: mar 2005
Ubicación: Argentina
Posts: 14
Poder: 0
killaton Va por buen camino
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....

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....

Última edición por killaton fecha: 25-03-2005 a las 15:50:04.
Tema Cerrado



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 23:20:02.


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