FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Ping a varias ips
Buenas noches!!
Alguien me puede ayudar? Quiero hacer que un Tpanel cambie de color dependiendo si la ip responde al ping o no. Estoy utilizando TIdIcmpClient pero no se como funciona realmente. Me echáis una mano? Gracias |
#2
|
|||
|
|||
Bueno ya conseguí hacer que al pulsar un boton se ponga el Panel verde o rojo dependiendo de si existe o no el Ping. Lo he hecho con esto:
Evento OnReply de TIdIcmpClient:
Evento OnClick del TButton:
Sabiendo esto, ahora quiero saber como hacer el ping automaticamente, es decir, con un boton iniciar y/o parar la labor de hacer ping. Gracias Última edición por ecfisa fecha: 17-09-2016 a las 01:51:35. Razón: Etiquetas [delphi][/delphi] |
#3
|
|||
|
|||
Creo que ya lo conseguí... si no es correcto el uso del Ttimer hacedmelo saber.
de momento esta resuelto así: dos Botones (Iniciar, Parar) Botón Iniciar:
Botón Parar
El Timer desactivado por defecto...
Siguiente paso.... hacer esto a un numero indefinido de IPs. Cual es la mejor forma de hacerlo? Gracias |
#4
|
||||
|
||||
En mi página tienes un par de ejemplos para realizar PING.
Uno utilizando ICMP y el otro WMI. Uno de ellos utiliza threads, cosa que te puede interesar si vas a realizar PING a múltiples servidores. http://neftali.clubdelphi.com/server...tilizando-wmi/ http://neftali.clubdelphi.com/ping-t...ando-icmp-dll/ Son antiguas, y compiladas con versión 6 de Delphi si no recuerdo mal, pero deberían funcionar en las versiones nuevas sin mayores problemas.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#5
|
|||
|
|||
Que pez estoy...
Siguiendo con el modo en que empece este programita, a partir de 8 o 9 direcciones Ips se empieza a relentizar la cosa no me imagino cuando este programa este haciendo ping a 200 ips. Se solucionaría esta "lentitud" con los threads (hilos)? |
#6
|
||||
|
||||
Correcto.
Debes utilizar hilos. Solventarás la velocidad y que el programa se quede "colgado", pero tendrás más consumo de memoria.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#7
|
|||
|
|||
Échame un cable cuando puedas Neftali. Nunca use hilos, no pido que me lo hagas sino que me guíes un poco más ;-)
(No puedo colgar imágenes ni hipervínculos aun ) Tenemos dos botones como explique (Iniciar y Parar) que lo unico que hacen es iniciar el TTimer BOTON INICIAR
BOTON PARAR
el TTimer al ser iniciado, cada segundo y medio hace lo siguiente;
cada C00X es un TIdIcmpclient que en su evento OnReply hace lo siguiente;
Solo he puesto el del TiDicmplient C002, el de el C003 es idéntico y así hasta el infinito y mas allá. El programa sin hilos, lo que hace es hace ping al 002, termina pero no pone su cuadradito en verde, tiene que esperar a que termine con el C003, y asi sucesivamente hasta que llegue al TidIcmpclient con la ultima IP. Hasta aquí todo claro. Por lo que leo, los hilos o Threads, pueden ayudarme a hacer las llamadas a cada evento Onreply paralelamente pero no se como hacerlo. Puedes ayudarme o guiarme un poco mas? Gracias de antemano |
#8
|
||||
|
||||
Utiliza el truco de eliminar una letra, ejemplo: _ww.loquesea.com/imagen.png
Y un moderador lo cambiará. |
#9
|
||||
|
||||
Cita:
Por lo tanto, lo que ganamos ejecutando threads es que al poner la tarea que "bloquea" en el thread, se bloquea ese thread, pero no el programa principal. Lo primero que debes hacer es crear el componente TIdIcmpClient por código. Modifica tu programa para hecerlo y comprueba que funciona. Una vez lo tengas se trata de crear un thread que: (1) En el create cree el componente por código. (2) Le tendrás que pasar algunos valores como parámetro y luego recoger la respuesta. (3) En el métdo Execute lanzar el ping. (4) Capturar el OnReply dentro del Thread (5) Crear un procedimiento OnTerminate, al que irá a parar el thread cuando acabe, que será el que pinte verde/rojo según el estado. Puedes realizar algunas pruebas e ir poniendo el código aquí. Te lo vamos revisando y corrigiendo si hare falta.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#10
|
|||
|
|||
Ufff.. es complicado esto para mi, voy a ir mascando poco a poco jejejjeje
Neftali, sacando conclusiones, creo entender ahora mejor tu primera respuesta, leyendo la ultima. Corrígeme si me equivoco: Primer Paso: Lo primero que debes hacer es crear el componente TIdIcmpClient por código Leyendo tu primera respuesta (segundo link de tu pagina "ICMP") mi componente TIdIcmpClient podría ser la unidad raw_ping.pas o unit1.pas? Gracias |
#11
|
||||
|
||||
Cita:
Crear un componente en ejecución es mucho más fácil. Los componentes que sueltas en un formulario se crean automáticamente al crear el formulario, pero también puedes crearlos por código (te servirás porque luego deberás hacerlo en el thread). Por ejemplo, en el club puedes encontrar muchos códigos para crear diferentes componentes en ejecución: http://www.clubdelphi.com/foros/show...6&postcount=16 http://www.clubdelphi.com/foros/showthread.php?p=277758 http://www.clubdelphi.com/foros/show...84&postcount=2 Algo más. Por ejemplo, en este hilo tienes código para un thread utilizando otro componente de las Indy. https://www.clubdelphi.com/foros/showthread.php?t=81584 En ese ejemplo [nlsGarcia] ha creado un Thread con un componente TidFTP. PPero para la creación y la estructura del Thread, te puede servir. En este también hay algo similar con un thread. Revisa los código porque te pueden servir de base para el tuyo. Intenta entenderlos. https://www.clubdelphi.com/foros/showthread.php?t=72316 (1) Verás como en ambos se crea el componente en cuestión en el Create de la clase del thread. (2) Luego hay un método Execute, que es el que se encarga de realizar el trabajo. Descargar un fichero o en tu caso realizar el PING.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. Última edición por Neftali [Germán.Estévez] fecha: 23-09-2016 a las 08:18:27. Razón: Corregi enlaces |
#12
|
|||
|
|||
Gracias:
Código:
procedure TForm1.Timer1Timer(Sender: TObject); begin IdIcmpClient1.Ping; end; |
#13
|
|||
|
|||
Manos a la Obra... os iré contando para que me corrijáis.
Gracias |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
valores ping | ramonibk | Internet | 2 | 16-12-2009 22:11:02 |
Recibir en ms el ping. | rauros | API de Windows | 11 | 17-07-2008 09:38:30 |
ping a las computadoras | chucoptero | Internet | 7 | 20-01-2006 18:47:18 |
Ping no funciona | Sirkius | Internet | 1 | 16-09-2004 19:13:45 |
ping | NuncaMas | Varios | 5 | 30-10-2003 21:39:14 |
|