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


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

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

    适配器列表:

     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

  • 相关阅读:
    Shiro 集成Spring 使用 redis时 使用redisTemplate替代jedisPool(五)
    shiro 实现 网站登录记住我功能 学习记录(四)
    magento2根据属性id或code来添加options
    微信小程序-注册程序app.js
    微信小程序-目录结构
    如何在最新的PHP 7.1.0上安装和运行最新的Magento 2.1.3
    添加新的php版本到wamp中
    全局使用php
    PHP设计模式之单例模式
    SourceTree使用
  • 原文地址:https://www.cnblogs.com/kybs0/p/12972980.html
Copyright © 2020-2023  润新知