Come sapere se connesso a Internet
Domanda
Vorrei scrivere un'app di Windows che fa qualcosa quando mi disconnetto da Internet . Stavo pensando di scrivere un'app C # / Delphi molto semplice che esegue semplicemente il polling ogni 20 secondi per vedere se sono ancora connesso.
Se devo effettuare il polling, vorrei davvero una soluzione diversa dal provare a scaricare una pagina Web dalla rete. Non posso presumere che un tentativo di download fallito significhi & Quot; non online & Quot; poiché potrebbero esserci altre app che consumano la larghezza di banda di Internet. Inoltre, sono sicuro che la connessione / il download costante da un determinato sito bloccherà il mio IP.
Sono sicuro che esiste un modo per sapere se sei online senza scaricare / collegarti a un server remoto ma non sono sicuro di come.
Soluzione
Attenzione che la connessione a Internet non significa nulla: cosa succede se si è connessi al proprio ISP, ma la spina dorsale è inattiva, o tutti i siti a cui si desidera accedere si trovano in un paese uscito dalla rete come di recente? Avere una connessione non significa che puoi fare quello che vuoi.
Ad ogni modo, come indicato prima, è possibile utilizzare l'API InternetGetConnectedState
per verificare che sia configurata una connessione Internet valida.
Ad esempio, la seguente routine mi ha detto correttamente che avevo una connessione LAN, ma non sono riuscito a rilevare che il mio firewall ZoneAlarm era impostato per bloccare & Quot; All Internet Activity & Quot ;, il che significa che hai effettivamente perso tutto Connettività 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;
Altri suggerimenti
Chiama la InternetGetConnectedState
. Questo articolo della knowledge base spiega come farlo.
Sembra che possa essere fatto utilizzando il metodo descritto qui: http: // www .csharphelp.com / archives3 / archive499.html