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.

È stato utile?

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

Sembra che possa essere fatto utilizzando il metodo descritto qui: http: // www .csharphelp.com / archives3 / archive499.html

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top