確定是否有可用網絡連接的最佳方法是什麼?如何檢查網絡連接?
94
A
回答
135
您可以爲您在.NET 2.0的網絡連接使用GetIsNetworkAvailable()
:
System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable()
要監控的IP地址或網絡可用性的變化而變化,從使用的NetworkChange類的事件:
System.Net.NetworkInformation.NetworkChange.NetworkAvailabilityChanged
System.Net.NetworkInformation.NetworkChange.NetworkAddressChanged
143
標記的答案是100%,但是,在某些情況下,標準方法被虛擬卡(虛擬盒,...)愚弄。通常希望根據其速度(串行端口,調制解調器等)丟棄一些網絡接口。
這裏是一段代碼,用於檢查這些情況:
/// <summary>
/// Indicates whether any network connection is available
/// Filter connections below a specified speed, as well as virtual network cards.
/// </summary>
/// <returns>
/// <c>true</c> if a network connection is available; otherwise, <c>false</c>.
/// </returns>
public static bool IsNetworkAvailable()
{
return IsNetworkAvailable(0);
}
/// <summary>
/// Indicates whether any network connection is available.
/// Filter connections below a specified speed, as well as virtual network cards.
/// </summary>
/// <param name="minimumSpeed">The minimum speed required. Passing 0 will not filter connection using speed.</param>
/// <returns>
/// <c>true</c> if a network connection is available; otherwise, <c>false</c>.
/// </returns>
public static bool IsNetworkAvailable(long minimumSpeed)
{
if (!NetworkInterface.GetIsNetworkAvailable())
return false;
foreach (NetworkInterface ni in NetworkInterface.GetAllNetworkInterfaces())
{
// discard because of standard reasons
if ((ni.OperationalStatus != OperationalStatus.Up) ||
(ni.NetworkInterfaceType == NetworkInterfaceType.Loopback) ||
(ni.NetworkInterfaceType == NetworkInterfaceType.Tunnel))
continue;
// this allow to filter modems, serial, etc.
// I use 10000000 as a minimum speed for most cases
if (ni.Speed < minimumSpeed)
continue;
// discard virtual cards (virtual box, virtual pc, etc.)
if ((ni.Description.IndexOf("virtual", StringComparison.OrdinalIgnoreCase) >= 0) ||
(ni.Name.IndexOf("virtual", StringComparison.OrdinalIgnoreCase) >= 0))
continue;
// discard "Microsoft Loopback Adapter", it will not show as NetworkInterfaceType.Loopback but as Ethernet Card.
if (ni.Description.Equals("Microsoft Loopback Adapter", StringComparison.OrdinalIgnoreCase))
continue;
return true;
}
return false;
}
8
Microsoft Windows Vista和7使用NCSI(網絡連接狀態指示器)工藝:
- NCSI上執行DNS查找www.msftncsi.com,然後請求http://www.msftncsi.com/ncsi.txt。該文件是純文本文件,僅包含文本'Microsoft NCSI'。
- NCSI向dns.msftncsi.com發送DNS查找請求。該DNS地址應該解析爲131.107.255.255。如果地址不匹配,則認爲互聯網連接無法正常工作。
1
調用此方法檢查網絡連接。
public static bool IsConnectedToInternet()
{
bool returnValue = false;
try
{
int Desc;
returnValue = Utility.InternetGetConnectedState(out Desc, 0);
}
catch
{
returnValue = false;
}
return returnValue;
}
把這下面的代碼行。
[DllImport("wininet.dll")]
public extern static bool InternetGetConnectedState(out int Description, int ReservedValue);
相關問題
- 1. 如何檢查網絡連接速度
- 2. 檢查網絡連接
- 3. 檢查網絡連接
- 4. 檢查網絡連接android
- 5. 檢查網絡連接iPhone
- 6. 檢查網絡連接android
- 7. 如何檢查網絡在WiFi(無線上網雖然連接)
- 8. 如何檢測網絡斷開連接?
- 9. 在android中的網絡連接檢查
- 10. 問題檢查網絡連接
- 11. 繼續檢查網絡連接android
- 12. Android的 - 檢查網絡連接
- 13. 檢查網絡連接和空的EditText
- 14. 檢查網絡連接的android
- 15. 檢查網絡連接是否可用
- 16. 檢查網絡連接崩潰
- 17. 檢查Flash中的網絡連接?
- 18. Java快速檢查網絡連接
- 19. 檢查是否連接到網絡; jQuery
- 20. 使用JavaScript檢查網絡連接
- 21. 使用vba檢查網絡連接
- 22. 檢查網絡連接不工作
- 23. 檢查libGDX中的網絡連接
- 24. 檢查片段中的網絡連接
- 25. Android,連接到wifi網絡時如何覆蓋互聯網連接檢查?
- 26. 檢測網絡連接
- 27. Swift中的IPv6網絡上的網絡連接檢查崩潰
- 28. 如何檢查Flash網絡應用程序中的網絡連接?
- 29. C#網絡編程 - 如何檢查「斷開連接」?
- 30. 如何在android中檢查蜂窩網絡連接
這是否照顧「有限的可用性」? – tofutim 2011-09-13 00:51:57
這並不總是在WPF中工作。一些筆記本電腦返回假,一些返回true – krilovich 2016-02-10 17:21:06
這真的有用嗎?我只寫了這一行,並關閉了我的路由器,仍然返回true! – Mushfiq 2017-05-20 23:37:55