Saber si hay conexión de internet
#1
Escrito 12 abril 2009 - 03:39
Fleon xD
Edito para corregir el título. escafandra.
#2
Escrito 12 abril 2009 - 04:21
La mejor manera de saber si estamos conectados es hacer un Ping a una IP conocida y de respuesta estable y segura (en lo posible), como puede ser Google.com (64.233.187.99 ó 64.233.183.99 etc).
Saludos.
#3
Escrito 13 abril 2009 - 07:58
66.96.134.34
hay creo la pregunta que queda es ¿se pueden invocar comandos de DOS desde delphi ?
asi como para hacer ping y en el caso de que haya respuesta te mande un mensaje, ilumine un boton o algo asi ??
#5
Escrito 13 abril 2009 - 09:47
Escribí hace algún tiempo una función Ping en C, por lo que, de momento, no tiene sentido publicarla aquí.
Saludos.
#6
Escrito 13 abril 2009 - 02:10
Mi duda es si es que funcionará... por lo de LAN + modem/router.
Saludos,
#7
Escrito 13 abril 2009 - 03:12
A parte del viable ping... yo me pregunto... ¿se puede emplear la función InternetGetConnectedState de WinInet?
Mi duda es si es que funcionará... por lo de LAN + modem/router.
Saludos,
Pues, a priori, pensar en InternetGetConnectedState es una buena idea. El problema es que sólo informa del tipo de conexión, no si realmente existe dicha conexión. Si apagas el router devuelve false, pero al encenderlo devuelve true inmediatamente, sin esperar a que se sincronice la ADSL y sin disponer, por tanto, de conexión. Lo mismo sucede si se desconecta el cable telefónico del router, simplemente informa true y el tipo de conexión, pero no la tenemos. Podéis realizar la prueba...
La forma más fiable es, a mi entender, un ping, ya que se envían y reciben paquetes. El punto débil es la caída de la IP destino, por eso uso IPs de Google, pensando que es bastante estable.
Saludos.
#8
Escrito 14 abril 2009 - 04:38
#9
Escrito 14 abril 2009 - 07:06
el amigo Escafandra tiene razón, el ping es la mejor/más sencilla/más segura forma de saber si estamos conectados. Es mejor en mi opinión hacer el ping a una url que a un ip, porque podría cambiar.
Efectivamente. De una URL sacas por código, con facilidad, la IP que es en definitiva el sujeto del Ping.
Saludos.
#10
Escrito 14 abril 2009 - 07:59
yo también opino que es mejor darle ping a un dominio
ya que así también compruebas que tengas resolución de dns
por que me ha ocurrido ocasiones en las que responden al ping
pero no hay resolucion de dns ( bueno me sucedio con cableacces )
Root
#11
Escrito 14 abril 2009 - 08:05
Fleon xD
#12
Escrito 14 abril 2009 - 08:13
ping google.com.mx
...y debe regresar la IP 74.125.91.104
Saludos
#13
Escrito 14 abril 2009 - 08:20
c:\ping google.com
hara cuatro pings
si requieres que el proceso sea permanente
necesitas agregarle un " -t "
para detenerlo es como un archivo por lotes
" Ctrl + C "
mmmm no pude anexar el print screen
#14
Escrito 14 abril 2009 - 09:27
Hola amigos, muchas gracias por su respuesta, por lo que veo es muy sencillo con el asunto del ping, pero tengo una duda al hacer ping a un dominio y no IP, intenté hacer PIng en CMD a google y no me sale, ¿cual es la manera correcta de hacerla?.
Fleon xD
¿Tu conexión es mediante proxy?
Saludos.
#15
Escrito 14 abril 2009 - 09:39
¿Tu conexión es mediante proxy?
En efecto sí.
Fleon xD
#16
Escrito 14 abril 2009 - 10:57
En este caso, quizás lo mas adecuado sea probar a leer una web, que también puede ser google.com mediante las API InternetOpen y InternetReadFile. Previamente debes estar identificado en el proxy.
Saludos.
#17
Escrito 14 abril 2009 - 11:11
Pues en ese caso no sirve. Ping usa el protocolo ICMP para la comunicación, sin embargo Proxy Server sólo soporta paquetes TCP y UDP.
En este caso, quizás lo mas adecuado sea probar a leer una web, que también puede ser google.com mediante las API InternetOpen y InternetReadFile. Previamente debes estar identificado en el proxy.
Saludos.
Una pregunta, y que pasa si la página que consultas esta en cache?
Salud OS
#18
Escrito 14 abril 2009 - 12:46
Pues en ese caso no sirve. Ping usa el protocolo ICMP para la comunicación, sin embargo Proxy Server sólo soporta paquetes TCP y UDP.
En este caso, quizás lo mas adecuado sea probar a leer una web, que también puede ser google.com mediante las API InternetOpen y InternetReadFile. Previamente debes estar identificado en el proxy.
Saludos.
Una pregunta, y que pasa si la página que consultas esta en cache?
Salud OS
Hola egostar. No generaría ningún problema pues utilizas InternetOpenUrl con el parámetro INTERNET_FLAG_RELOAD forzando la lectura de la página, no del caché.
Saludos.
#19
Escrito 14 abril 2009 - 12:49
Salud OS
#20
Escrito 14 abril 2009 - 12:56
//--------------------------------------------------------------------------- // Lee una Web en Buffer hasta size. bool InternetReadWeb(char* URL, char* Buffer, int size) { HINTERNET hNet; HINTERNET hUrl; DWORD BytesRead = 0; bool Result = false; if(InternetAttemptConnect(0) != ERROR_SUCCESS) return false; hNet = InternetOpen("MyApplication", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0); if (hNet){ hUrl = InternetOpenUrl(hNet, URL, NULL, 0, INTERNET_FLAG_RELOAD, 0); if (hUrl){ ZeroMemory(Buffer, size); // Lee la pagina web... for(int ind=0; ; ind+=BytesRead){ Result = InternetReadFile(hUrl, Buffer+ind, size-1-ind, &BytesRead); if(Result && BytesRead==0) break; } InternetCloseHandle(hUrl); } InternetCloseHandle(hNet); } return Result; }
Saludos.