我有这个方法:
public static void testConnection() { if (System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable()) { System.Windows.MessageBox.Show("This computer is connected to the internet"); } else { System.Windows.MessageBox.Show("This computer is not connected to the internet"); } }
我想它会告诉我连接是否可用,但是它总是返回true(并且打印第一条消息),即使我确定没有连接。 我做错了什么?
PS:我还在学习C#。
请纠正我,如果我错了,但据我所知,你正在使用的方法是检查网络连接,不一定互联网连接。 我会假设,如果你是在任何类型的网络,这将返回true,无论互联网可用或不? 看到这个
我已经注意到,检查互联网连接的一种方法如下:
private bool IsInternetAvailable() { try { Dns.GetHostEntry("www.google.com"); //using System.Net; return true; } catch (SocketException ex) { return false; } }
上面的代码可以在下面的帖子中找到(在VB.Net中,通过阅读Joacim Andersson [MVP]的评论)。
注意:最新的编辑是由AceInfinity提出的,但在社区评论中被拒绝。 我的声誉太低,无法覆盖这个,所以我自己做了改变。
我觉得这个方法比较合适:
public static bool getIsInternetAccessAvailable() { switch(NetworkInformation.GetInternetConnectionProfile().GetNetworkConnectivityLevel()) { case NetworkConnectivityLevel.InternetAccess: return true; default: return false; } }
从msdn :
有很多情况下设备或计算机没有连接到有用的网络,但仍被视为可用和GetIsNetworkAvailable将返回true。
其中一个例子可能是你的情况:
例如,如果运行应用程序的设备连接到需要代理的无线网络,但未设置代理,则GetIsNetworkAvailable将返回true。 当GetIsNetworkAvailable将返回true的另一个示例是,如果应用程序正在连接到集线器或路由器(集线器或路由器已丢失上游连接)的计算机上运行。
请注意,我们正在使用Windows.Networking.Connectivity.NetworkInformation而不是System.Net.NetworkInformation命名空间。
public bool checkInternetAccess() { var connectivityLevel = Windows.Networking.Connectivity.NetworkInformation.GetInternetConnectionProfile().GetNetworkConnectivityLevel(); return connectivityLevel == NetworkConnectivityLevel.InternetAccess; }
基本上什么ventura8说。 我会评论他的解决方案,提到命名空间,但我缺乏足够的声誉。
来自MSDN(重点是我的):
如果任何网络接口标记为“up”,并且不是回送或通道接口,则认为网络连接可用。
如果与“连接”你的意思是互联网连接,那么你应该DllImport
函数InternetCheckConnection或InternetQueryOption
。
相反,如果你需要的只是要知道计算机是否连接到任何有用的局域网,你可以做的最好的事情是自己迭代网络连接,并过滤(使用NetworkInterfaceType , IsReceiveOnly
和OperationalStatus
)你不感兴趣。
我想它会告诉我连接是否可用,但是它总是返回true(并且打印第一条消息),即使我确定没有连接。
你对“连接”的含义有不同的意见。 就操作系统而言,当连接到NIC的修补以太网电缆连接,或者无线网卡连接到无线接入点,或者任何连接处于活动状态时,都可以建立连接。
手册还解释了这一点:
NetworkInterface.GetIsNetworkAvailable :
指示是否有任何网络连接可用。
如果要检测Internet连接,请查看InternetGetConnectedState()
(或InternetCheckConnection()
,以从WinINet API检查特定主机的可访问性)方法。