2010-03-16 75 views
0

我做了一個快速搜索如何檢查互聯網是否可用。他們中的大多數人談論了對wininet.dll進行InterOp調用。優雅/簡單的方法來檢查互聯網是否可用

其中一個答案指向System.Net.NetworkInformation命名空間。探索命名空間,我發現一個類Ping可以用來從代碼ping我們的服務器,並檢查服務器是否可用。

我想問的是這個解決方案如何與其他解決方案進行比較?

Ping soPing = new Ping(); 
var soPingReply = soPing.Send("www.stackoverflow.com"); 
if (soPingReply.Status != IPStatus.Success) 
{ 
    // SO not available 
} 

回答

1

試試這個:

[DllImport("wininet.dll")] 
private extern static bool InternetGetConnectedState(out int Description, int ReservedValue); 

//Creating a function that uses the API function... 
public static bool IsConnectedToInternet() 
{ 
    int Desc; 
    return InternetGetConnectedState(out Desc, 0); 
} 
+0

這個解決方案與我給出的解決方案相比如何? – Trainee4Life

+0

它使用標準的win32方法。 問題是,你不需要回答一個問題「互聯網可用」是什麼意思?「 如果你有'互聯網,但是臨時下來怎麼辦?你必須在這裏實現更復雜的邏輯(查看幾個網站),或者依靠windows內置工具。 至於我,我寧願檢查我需要的具體網站/服務器的平衡性,但不是整個互聯網。這個信息通常更有用(當然,如果你正在構建搜索引擎:)) –

+0

「我確實想要檢查客戶端網站的連通性,如果存在,然後加載它,否則加載離線頁面網絡瀏覽器控制「。 正如您所建議的那樣,檢查特定的站點/服務器總是一個更好的選擇。我應該怎麼做呢? – Trainee4Life

1

網絡連接無關用ping通一些(隨機?)網站的能力。 如果你在防火牆的後面或者目的地是ping(或者響應)很可能在實際流量不存在時被阻塞。

即使該ping能夠正常工作,也不能保證在您想要發出實際請求時連接仍然可用。 所以最好只做實際的請求,並確保處理任何可能發生的網絡錯誤。

+0

我其實想要檢查客戶端網站的連通性。如果存在,則加載它,否則在Web瀏覽器控件中加載離線頁面。 – Trainee4Life

+0

同樣的事情。試着加載它。如果失敗,則顯示脫機頁面,如果不是,則顯示真實的頁面。 – jwenting

0

它多久嘗試和平?如果您的應用鎖定了30秒,那麼這有什麼關係?

你有互聯網連接但暫時關閉嗎?

是互聯網已關閉還是SO網站?

如果本地防火牆阻止ping,該怎麼辦?

+0

IPStatus枚舉有相當多的狀態字段。也許它會爲你提到的案例返回一些成功之外的東西。在ping時,還可以指定超時。 – Trainee4Life

相關問題