zoukankan      html  css  js  c++  java
  • 获取电脑的网络连接状态(六)适配器状态 及 几种方案耗时对比

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

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

    适配器列表:

     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

  • 相关阅读:
    第九章:Elasticsearch集群优化及相关节点配置说明
    Linux115条常用命令
    第一章:引擎介绍
    第七章:JAVA引用ESWCF及部分方法说明
    第八章:SCRT搭建ES搜索引擎步骤
    第三章:ES分词简单说明
    第二章:ES索引说明
    疑难杂症:Java中Scanner连续获取int和String型发生错误.
    java实现中缀表达式转后缀表达式
    编程题:输出字符集合的所有排列组合。
  • 原文地址:https://www.cnblogs.com/kybs0/p/12972980.html
Copyright © 2011-2022 走看看