2009-01-26 5 views
3

Je souhaite écrire une application Windows qui fait quelque chose quand je suis déconnecté d'Internet. Je pensais à écrire une application C#/Delphi très simple qui interroge simplement toutes les 20 secondes pour voir si je suis toujours connecté.Comment savoir si je suis connecté à Internet

Si je dois interroger j'aimerais vraiment une solution autre que d'essayer de télécharger une page Web sur le net. Je ne peux pas supposer qu'une tentative de téléchargement échoue signifie "pas en ligne", car il peut y avoir d'autres applications qui mangent la bande passante Internet. De plus, je suis sûr que la connexion/le téléchargement continu d'un site particulier va bloquer mon adresse IP.

Je suis sûr qu'il ya un façon de dire si vous êtes en ligne sans télécharger/se connecter à un serveur distant mais je ne sais pas comment.

Répondre

10

Méfiez-vous que la connexion à Internet ne veut rien dire: que se passe-t-il si vous êtes connecté à votre FAI, mais que le réseau fédérateur est en panne ou tous les sites auxquels vous souhaitez accéder? ? Avoir une connexion ne signifie pas que vous pouvez faire ce que vous voulez.
Quoi qu'il en soit, comme indiqué précédemment, vous pouvez utiliser l'API InternetGetConnectedState pour vérifier que vous avez configuré une connexion Internet valide. Par exemple, la routine suivante m'a indiqué correctement que j'avais une connexion LAN, mais que je n'ai pas détecté que mon pare-feu ZoneAlarm était configuré pour bloquer "All Internet Activity", ce qui signifie que vous avez effectivement perdu toute connexion Internet.

routine Delphi:

procedure IsConnected; 
var 
    dwFlags: DWORD; 
begin 
    if InternetGetConnectedState(@dwFlags, 0) then 
    begin 
    if (dwFlags and INTERNET_CONNECTION_MODEM) = INTERNET_CONNECTION_MODEM then 
     ShowMessage('Modem Connection') 
    else 
    if (dwFlags and INTERNET_CONNECTION_LAN) = INTERNET_CONNECTION_LAN then 
     ShowMessage('LAN Connection') 
    else 
    if (dwFlags and INTERNET_CONNECTION_PROXY) = INTERNET_CONNECTION_PROXY then 
     ShowMessage('Connection thru Proxy') 
    else 
    if (dwFlags and INTERNET_CONNECTION_OFFLINE) = INTERNET_CONNECTION_OFFLINE then 
     ShowMessage('Local system in offline mode') 
    else 
    if (dwFlags and INTERNET_CONNECTION_CONFIGURED) = INTERNET_CONNECTION_CONFIGURED then 
     ShowMessage('Valid connection exists, but might or might not be connected') 
    end 
    else 
    ShowMessage('Not Connected. Try to connect and risk of being prompted to dial into another Internet Service Provider.'); 
end; 
+0

Wow, j'ai fait une double prise quand j'ai vu combien de soutien cette réponse a eu. Je ne suis pas sûr si cela s'applique à ma situation ou non. Fondamentalement, mon routeur continue à se déconnecter et je veux l'éteindre et le rallumer en utilisant les commandes X10 s'il est déconnecté. – CodeAndCats