2009-01-26 122 views
3

我希望寫一個Windows應用程序,它做一些事情,當我成爲從互聯網上斷開。我想編寫一個非常簡單的C#/ Delphi應用程序,看看我還在連接的簡單調查,每20秒。如何判斷是否連接到互聯網

如果我要查詢我真的很想比試圖從網上下載一個網頁,其他的解決方案。我不能認爲下載嘗試失敗意味着「不在線」,因爲可能有其他應用程序正在消耗互聯網帶寬。另外,我確定不斷連接/從某個特定站點下載會阻止我的IP。

我敢肯定有一個的方式來告訴你,如果你在線沒有下載/連接到遠程服務器,但我不知道如何。

回答

10

要注意的是連接到互聯網並沒有真正意味着什麼:如果你正在連接到ISP,但骨幹已關閉,或者你要訪問的網站是在最近去了網格狀的國家?建立聯繫並不意味着你可以做你想做的事。
無論如何,前面所說,你可以使用InternetGetConnectedState API來測試你是否有一個有效的網絡連接配置。
作爲一個例子,下面的例程正確告訴我我有一個局域網連接,但未能檢測到我的ZoneAlarm防火牆設置爲阻止「所有Internet活動」,這意味着您有效地丟失了所有Internet連接。

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

哇,我做了雙重考慮,當我看到這個答案多少支持了。我不確定這是否適用於我的情況,但不。基本上我的路由器保持斷開連接,如果斷開連接,我想使用X10命令將其關閉並重新打開。 – CodeAndCats 2009-01-26 21:41:55