google一下,发现了很多办法,列举如下:
1)使用HOOK监控
2)通过WMI监控 ---涉及到系统核心了,而且对于vista/win7等系统是否能用还不知道
3)try{连接服务器}catch{} ---性能较低
4)ping测试 ---准确性及时性应该是最高的,对应主机也不难找到,比如baidu、google是不会关机的
具体实现参考此兄博文:http://blog.csdn.net/xiamin/archive/2009/02/14/3889696.aspx
5)使用api:wininet.dll ---简单、高效
上面3)4)5)的实现都可以参考此兄:http://blog.csdn.net/Sugar_Tiger/archive/2009/06/23/4291971.aspx
6)通过Socket连接测试 ---不甚熟悉
下面推荐两个正宗.NET方案:
1)使用System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable()判断联网状态
注意:只要有一个网络是通的方法就返回true,其解释是Indicates whether any network connection is available.
System.Net.NetworkInformation命名空间下另有NetworkChange类,此类提供了网络连接状态改变事件(注意也是any network conn)和网络地址改变事件(针对any network conn的ip改变),用起来还是很方便的。
2)使用Microsoft.VisualBasic.Devices.Computer.Network.IsAvailable属性
注意:需要引用Microsoft.VisualBasic.dll,这个是VB在.net下的实现,里面有很多方便的小功能哦,放心它也是代码安全的。
这里也提供了连接更改事件(也是any network conn的)。
总结:最后的两个推荐方案简单实用高效,推荐使用;
但是如果对网络判断准确性的要求很高并且是连接外网的话,定时ping 百度或许是不错的选择(百度服务器?就牺牲一下方便大家呗 ^_^)