PDA

Ver la Versión Completa : Como saber si tengo conexión?


Gagiel
16-03-2007, 10:49:47
Hola,

Mi pregunta es la siguiente, estoy trabajando con un servidor tcp y me gustaria saber cuando se queda sin conexión, pero me refiero a sin red, ya sea intranet como internet. Para internet se puede comprobar haciendo pings. pero para saber si tengo red interna como podria hacerlo (representa que no se la dicecion del gateway(puede variar -> DHCP).

Muchas gracias!

Saludos

seoane
16-03-2007, 14:52:03
Es una pregunta interesante :)

Podemos intentar resolver el problema de varias maneras. Lo primero, para comprobar si tenemos conexión a internet lo mejor es, como tu ya has dicho, hacer ping hacia una dirección fuera de nuestra red. Por esa parte creo que el tema esta resuelto. En cuanto a la red interna, se me ocurre que podrías hacer un ping a la puerta de enlace (gateway). No saber de antemano la dirección de la puerta de enlace no supone un problema, siempre podemos averiguarla.

Por otro lado, si estas usando DHCP y WindowsXP podemos utilizar un pequeño truco para saber si alguien ha desconectado el cable de red. Cuando windows detecta que el cable esta desconectado, cambia la ip que le ha sido asignada por otra diferente, una por defecto (ahora mismo no recuerdo cual es). Solo tendríamos que comprobar que dirección ip tenemos y si se ajusta a al rango de direcciones ip que solemos usar, si no esta dentro de ese rango es que el cable esta desconectado. (Este truco lo usaba yo contra unos "listos" que desconectaban el cable de red para hacer cosas "malas" sin que los viera)

Si alguna de esas soluciones te gusta, podemos meternos mas a fondo con el código.

Gagiel
19-03-2007, 08:45:03
Jejejeje

Muy interesantes las posibles soluciones, pero creo que la mejor es la útima, ya es la más completa, según mi opinion.
Si me hechas una manita con el codigo :D

Muchisimas gracias!

seoane
19-03-2007, 14:52:54
Muy interesantes las posibles soluciones, pero creo que la mejor es la útima, ya es la más completa, según mi opinion.
Si me hechas una manita con el codigo :D


Si te refieres a comprobar la ip, es muy sencillo. Con una función como esta:

Uses Winsock;

function GetIp: string;
var
Buffer: array[0..127] of char;
WSAData: TWSADATA;
HostEnt: phostent;
begin
Result:= '';
FillChar(Buffer,Sizeof(Buffer),#0);
if WSAStartup(MAKEWORD(1, 1), WSADATA) = 0 then
begin
if GetHostName(@Buffer,Sizeof(Buffer)) = 0 then
begin
HostEnt:= gethostbyname(@Buffer);
if HostEnt <> nil then
Result:= String(inet_ntoa(PInAddr(HostEnt.h_addr_list^)^));
end;
WSACleanup;
end;
end;


Obtenemos la ip del equipo, si el cable de red esta desconectado nos dará un valor del tipo "127.0.0.1" y si esta conectado pero el DHCP no funciona dará un valor por defecto (sigo sin encontrar el valor). En cualquier caso, lo normal es que en nuestra red utilicemos direcciones del tipo 192.168.x.x o 10.x.x.x así que solo tenemos que comprobar que la ip que obtenemos se encuentra dentro del rango para saber si todo funciona bien. De todas formas tendras que realizar los ajustes necesarios para tu red.

Gagiel
20-03-2007, 08:25:23
Muchas gracias por el codigo!

Es una gran idea y muy simple y sencilla, no se me habia ocurrido!
Lo he estado probando y los resulatdos són:

Si tiene conexión da la ip que toque.
Si no tiene cable de red o tiene la wlan desactivada: 127.0.0.1
Si el DHCP falla, sea por codigos wep o porque el router no tiene DHCP la ip que se queda es la siguiente: 169.254.120.40

Muchas gracias por la respuesta!

Saludos!

escafandra
29-12-2007, 20:03:13
Me parece un tema muy interesante, el que habéis tratado. Estoy interesado también en saber hacer un ping, a una dirección externa de internet, por código. Por lo que leo en este hilo, lo teneis claro y me gustaría que me echaseis una mano si podeis.

Gracias

dec
29-12-2007, 20:20:32
Hola,

escafandra, por favor, no repitas la misma cuestión en hilos diferentes, puesto que lleva a la confusión. Creo que deberían responderte aquí (http://www.clubdelphi.com/foros/showthread.php?t=51791), donde inicialmente hiciste la pregunta. Revisa la guía de estilo de los foros para más información.