Comment savoir s'il est connecté à internet
Question
Je souhaite rédiger une application Windows permettant de faire quelque chose lorsque je me déconnecte d'Internet . Je pensais écrire une application très simple C # / Delphi qui interrogerait simplement toutes les 20 secondes pour voir si je suis toujours connecté.
Si je dois interroger, je voudrais vraiment une solution autre que d’essayer de télécharger une page Web depuis le réseau. Je ne peux pas supposer qu'une tentative de téléchargement échouant signifie & "Pas en ligne &"; car il peut y avoir d'autres applications consommant la bande passante Internet. De plus, je suis sûr que mon adresse IP sera bloquée en permanence lors de la connexion / téléchargement depuis un site particulier.
Je suis sûr qu'il existe un moyen de savoir si vous êtes en ligne sans téléchargement / connexion à un serveur distant , mais je ne sais pas comment.
La solution
Attention, le fait de se connecter à Internet ne veut pas dire grand chose: que se passe-t-il si vous êtes connecté à votre fournisseur d'accès à Internet, mais que votre réseau dorsal est en panne ou que tous les sites auxquels vous souhaitez accéder se trouvent dans un pays qui a récemment quitté le réseau? 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 disposez d'une connexion Internet valide configurée.
Par exemple, la routine suivante m'a dit correctement que j'avais une connexion LAN, mais n'a pas réussi à détecter que mon pare-feu ZoneAlarm était configuré pour bloquer & "Toutes les activités Internet &"; Ce qui signifie que vous avez effectivement perdu tout Connectivité 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;
Autres conseils
Appelez la fonction InternetGetConnectedState
. Cet article de la base de connaissances explique comment procéder.
Il semble que cela puisse être fait en utilisant la méthode décrite ici: http: // www .csharphelp.com / archives3 / archive499.html