通过适配器判断网络连接类型及状态
判断网络的连接状态/连接类型,可以直接查看网络适配器列表的状态
适配器列表:
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 }
连接类型,使用适配器的类型或者描述来筛选不准确。我暂时是用名称来筛选的
有线连接状态:
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。
几种方案的连接耗时
有线连接下耗时:
无线连接下耗时:
断网状态下耗时: