Ir al contenido



Foto

Hacer Ping con Indy (TIdIcmpClient)


  • Por favor identifícate para responder
8 respuestas en este tema

#1 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.254 mensajes
  • LocationRepública Dominicana

Escrito 05 marzo 2009 - 11:43

Pues aquí­ dejo un pequeñito código para realizar PINGs a cualquier equipo conectado a una red, hace un ratito estaba buscando como hacerlo y llegué a esta conclusión usando las Indy, más precisamente con el componente TIdIcmpClient, colocaremos uno y un TButton en un Form, y aquí­ el código:

Evento OnReply de TIdIcmpClient:



delphi
  1. procedure TForm1.IdIcmpClient1Reply(ASender: TComponent;
  2.   const AReplyStatus: TReplyStatus);
  3. begin
  4.   if IdIcmpClient1.ReplyStatus.BytesReceived = 0 then
  5.     begin
  6.       ShowMessage('!Mierda, está desconectado!');
  7.     end else begin
  8.       ShowMessage('¡Está conectado!');
  9.     end;
  10. end;



Evento OnClick del TButton:



delphi
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. begin
  3.   IdIcmpClient1.Ping;
  4. end;



Y eso es todo, espero les sea útil.

Saludos.
  • 0

#2 eduarcol

eduarcol

    Advanced Member

  • Administrador
  • 4.481 mensajes
  • LocationVenezuela

Escrito 05 marzo 2009 - 11:46

para los que no sean amigos de las indy

http://www.delphiacc...ilerias/ping-!/
  • 0

#3 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.084 mensajes
  • LocationRepública Dominicana

Escrito 05 marzo 2009 - 01:07

para los que no sean amigos de las indy

http://www.delphiacc...ilerias/ping-!/


El código de cHackAll es impresionante y es de admirar, no le resto merito es bastante bueno y usa las API a fondo, que deberí­a ser nuestro Norte, pero el de Enecumene es bastante fácil.  :D  :D  :D  :D
  • 0

#4 ramonrafe

ramonrafe

    Member

  • Miembros
  • PipPip
  • 24 mensajes
  • LocationEspaña

Escrito 02 noviembre 2009 - 06:56

Hola a tod@s.
A la explicación, le añadiría que hay que rellenar la propiedad Host del componente IdIcmpClient1.
Si no se hace, sale que siempre estás conectado, aunque desconectes el cable de conexión (al menos a mí me pasó así). En mi caso escribí "www.google.es".
Creo que este ejemplo es la mejor forma, de saber si hay conexión a internet o no, que he visto en muchos lugares.
Gracias.
Ramón
  • 0

#5 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.254 mensajes
  • LocationRepública Dominicana

Escrito 02 noviembre 2009 - 07:23

Ah vaya, gracias amigo ramonrafe por hacerme ver que se me pasó ese pequeño detalle :$ (y). Espero verlo con más frecuencia ;) (b).
  • 0

#6 escafandra

escafandra

    Advanced Member

  • Moderadores
  • PipPipPip
  • 3.702 mensajes
  • LocationMadrid - España

Escrito 03 noviembre 2009 - 01:29


Creo que este ejemplo es la mejor forma, de saber si hay conexión a internet o no, que he visto en muchos lugares.

Ciertamente el método del Ping es el que uso para saber si tengo conexión a internet en la mayoría de los casos. La única pega es si la conexión es mediante proxy, en cuyo caso el ping no funciona. en ese caso tendremos que leer directamente de una web.

Saludos.


  • 0

#7 Koalasoft

Koalasoft

    Advanced Member

  • Miembros
  • PipPipPip
  • 130 mensajes
  • LocationMéxico

Escrito 01 febrero 2017 - 01:34

Que tal ..

 

Estuve checando el ejemplo que mostró el compañero. Solo que en lugar de comprobar el acceso a Internet quise hacerlo hacia una IP de la red local, modifique tantito el código de llamado.


delphi
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. begin
  3. if Edit1.Text = '' Then
  4. Begin
  5. ShowMessage('Teclea el Host');
  6. Edit1.SetFocus;
  7. exit;
  8. End;
  9. // ----------------
  10. if Edit2.Text = '' Then
  11. Begin
  12. ShowMessage('Teclea el Puerto');
  13. Edit2.SetFocus;
  14. exit;
  15. End;
  16. // ----------------
  17.  
  18. IdIcmpClient1.Host := Edit1.Text;
  19. IdIcmpClient1.Port := StrToInt(Edit2.Text);
  20. IdIcmpClient1.Ping; // Ejcuto el Ping
  21. end;

Para que escribiera la IP y un puerto, en mi caso el de Mysql que es el 3306, al poner uno correcto me sale el mensaje de que esta conectado, pero si pongo uno que no esta conectado y me vuelve a decir que esta conectado.

 

Algúna idea? , Uso Delphi 7.


  • 0

#8 escafandra

escafandra

    Advanced Member

  • Moderadores
  • PipPipPip
  • 3.702 mensajes
  • LocationMadrid - España

Escrito 01 febrero 2017 - 04:27

Que tal ..

 

Estuve checando el ejemplo que mostró el compañero. Solo que en lugar de comprobar el acceso a Internet quise hacerlo hacia una IP de la red local, modifique tantito el código de llamado.


delphi
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. begin
  3. if Edit1.Text = '' Then
  4. Begin
  5. ShowMessage('Teclea el Host');
  6. Edit1.SetFocus;
  7. exit;
  8. End;
  9. // ----------------
  10. if Edit2.Text = '' Then
  11. Begin
  12. ShowMessage('Teclea el Puerto');
  13. Edit2.SetFocus;
  14. exit;
  15. End;
  16. // ----------------
  17.  
  18. IdIcmpClient1.Host := Edit1.Text;
  19. IdIcmpClient1.Port := StrToInt(Edit2.Text);
  20. IdIcmpClient1.Ping; // Ejcuto el Ping
  21. end;

Para que escribiera la IP y un puerto, en mi caso el de Mysql que es el 3306, al poner uno correcto me sale el mensaje de que esta conectado, pero si pongo uno que no esta conectado y me vuelve a decir que esta conectado.

 

Algúna idea? , Uso Delphi 7.

 

Ping no usa puertos, resumidamente manda un paquete a una máquina y espera una respuesta. Si la máquina está en la red, leerá el paquete y responderá.

 

Saludos.


  • 0

#9 Koalasoft

Koalasoft

    Advanced Member

  • Miembros
  • PipPipPip
  • 130 mensajes
  • LocationMéxico

Escrito 01 febrero 2017 - 05:20

Ping no usa puertos, resumidamente manda un paquete a una máquina y espera una respuesta. Si la máquina está en la red, leerá el paquete y responderá.

 

Saludos.

 

Es correcto estimado, quite ese campo y ahora ya funciona bien, el motivo del por que lo puse es por que en el componente vi que había un parámetro llamado "port" el cual pensé que se podía hacer un ping hacia un puerto especifico, gracias !! 


  • 0