确定是否有可用网络连接的最佳方法是什么?如何检查网络连接?
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. 检查网络连接iPhone
- 3. 问题检查网络连接
- 4. 检查网络连接的android
- 5. 检查网络连接是否可用
- 6. Android的 - 检查网络连接
- 7. 检查Flash中的网络连接?
- 8. 检查是否连接到网络; jQuery
- 9. 检查libGDX中的网络连接
- 10. 检查片段中的网络连接
- 11. 如何检测网络断开连接?
- 12. Android,连接到wifi网络时如何覆盖互联网连接检查?
- 13. 检测网络连接
- 14. Swift中的IPv6网络上的网络连接检查崩溃
- 15. iphone - 我如何检查我是否连接到无线网络
- 16. UWP-如何检查是否连接到Wifi网络
- 17. 如何检查网络摄像头是否连接在java中?
- 18. 如何检查网络连接是否可用在iphone
- 19. 如何检查在Android手机的网络连接
- 20. 如何检查Android设备是否连接到网络?
- 21. 如何使用活动检查Android中的网络连接性
- 22. 如何在Angular2中检查用户是否有网络连接?
- 23. 如何使用Windows API检查网络连接类型?
- 24. 数据库连接:如何检查它,取决于网络连接状态
- 25. 检测任何连接网络的人
- 26. 机器人如何检查无线网络连接,但没有互联网连接的带wifi连接
- 27. 如何检查从网络
- 28. WinRT如何检查互联网连接?
- 29. 网络连接
- 30. 连续调查网络连接iphone
这是否照顾“有限的可用性”? – tofutim 2011-09-13 00:51:57
这并不总是在WPF中工作。一些笔记本电脑返回假,一些返回true – krilovich 2016-02-10 17:21:06
这真的有用吗?我只写了这一行,并关闭了我的路由器,仍然返回true! – Mushfiq 2017-05-20 23:37:55