获取电脑的网络连接状态(六)适配器状态 及 几种方案耗时对比

通过适配器判断网络连接类型及状态

判断网络的连接状态/连接类型,可以直接查看网络适配器列表的状态

适配器列表:

 1         public static NetworkInterface[] GetAllAdapters()
 2         {
 3             //获取本地计算机上网络接口的对象
 4             NetworkInterface[] adapters = NetworkInterface.GetAllNetworkInterfaces();
 5             //Debug.WriteLine("适配器个数:" + adapters.Length);
 6             //foreach (NetworkInterface adapter in adapters)
 7             //{
 8             //    Debug.Write("描述:" + adapter.Description);
 9             //    Debug.Write("标识符:" + adapter.Id);
10             //    Debug.Write("名称:" + adapter.Name);
11             //    Debug.Write("类型:" + adapter.NetworkInterfaceType);
12             //    Debug.Write("速度:" + adapter.Speed * 0.001 * 0.001 + "M");
13             //    Debug.Write("操作状态:" + adapter.OperationalStatus);
14             //    Debug.Write("MAC 地址:" + adapter.GetPhysicalAddress());
15 
16             //    //格式化显示MAC地址
17             //    PhysicalAddress pa = adapter.GetPhysicalAddress();//获取适配器的媒体访问(MAC)地址
18             //    byte[] bytes = pa.GetAddressBytes();//返回当前实例的地址
19             //    StringBuilder sb = new StringBuilder();
20             //    for (int i = 0; i < bytes.Length; i++)
21             //    {
22             //        sb.Append(bytes[i].ToString("X2"));//以十六进制格式化
23             //        if (i != bytes.Length - 1)
24             //        {
25             //            sb.Append("-");
26             //        }
27             //    }
28             //    Debug.WriteLine("MAC 地址:" + sb);
29 
30             //}
31             return adapters;
32         }
View Code

连接类型,使用适配器的类型或者描述来筛选不准确。我暂时是用名称来筛选的

有线连接状态:

 1     /// <summary>
 2     /// 有线连接
 3     /// </summary>
 4     /// <returns></returns>
 5     public static bool IsWiredNetworkConnected()
 6     {
 7         var adaters = NetworkInterfaceHelper.GetAllAdapters();
 8         if (adaters.Any(i => (i.Name.ToString().Contains("以太网")||i.Name.ToString().Contains("拨号")||i.Name.ToString().Contains("宽带")) && i.OperationalStatus == OperationalStatus.Up))
 9         {
10             return true;
11         }
12         return false;
13     }

无线连接状态:

 1     /// <summary>
 2     /// 无线连接
 3     /// </summary>
 4     /// <returns></returns>
 5     public static bool IsWirelessNetworkConnected()
 6     {
 7         var adaters = NetworkInterfaceHelper.GetAllAdapters();
 8         if (adaters.Any(i => i.Name.ToString().Contains("WLAN") && i.OperationalStatus == OperationalStatus.Up))
 9         {
10             return true;
11         }
12         return false;
13     }

其中,OperationStatus是适配器的连接状态,Up是网络连接状态,还有其它枚举:

 判断网络类型,推荐以上方案,比IsNetworkAlive准确度高。当然这个耗时也偏高,基本在20-30ms。

几种方案的连接耗时

有线连接下耗时:

无线连接下耗时:

断网状态下耗时:

 Demo:https://github.com/Kybs0/NetworkConnectStatusDemo

posted @ 2020-05-27 14:43  唐宋元明清2188  阅读(35)  评论(0编辑  收藏