1、前言
  最近做项目需要用到监测网速及流量,我经过百度和墙内谷歌都没能快速发现监测IPV6流量和网速的用例;也经过自己的一番查询和调试,浪费了不少时间,现在作为经验分享出来希望大家指正。

2、C#代码

using System.Net.NetworkInformation;
using System.Timers;namespace Monitor
{public class MonitorNetwork{      public string UpSpeed { get; set; }   public string DownSpeed { get; set; }public string AllTraffic { get; set; }            private string NetCardDescription { get; set; }    //建立连接时上传的数据量private long BaseTraffic { get; set; }    private long OldUp { get; set; }    private long OldDown { get; set; }private NetworkInterface networkInterface { get; set; }private Timer timer = new Timer() { Interval = 1000 };public void Close(){timer.Stop();   }public MonitorNetwork(string netCardDescription){   timer.Elapsed += Timer_Elapsed;    NetCardDescription = netCardDescription;    timer.Interval = 1000;     }public bool Start(){networkInterface = null;    NetworkInterface[] nics = NetworkInterface.GetAllNetworkInterfaces();    foreach (var var in nics){if (var.Description.Contains(NetCardDescription)){networkInterface = var;break;}}    if (networkInterface == null){return false;}else{    BaseTraffic = (networkInterface.GetIPStatistics().BytesSent +networkInterface.GetIPStatistics().BytesReceived);    OldUp = networkInterface.GetIPStatistics().BytesSent;    OldDown = networkInterface.GetIPStatistics().BytesReceived;   timer.Start();    return true;}}private string[] units = new string[] {"KB/s","MB/s","GB/s" };private void CalcUpSpeed(){long nowValue = networkInterface.GetIPStatistics().BytesSent;    int num = 0;double value = (nowValue - OldUp) / 1024.0;while (value > 1023){value = (value / 1024.0);num++;}   UpSpeed = value.ToString("0.0") + units[num];    OldUp = nowValue;    }private void CalcDownSpeed(){long nowValue = networkInterface.GetIPStatistics().BytesReceived;   int num = 0;double value = (nowValue - OldDown) / 1024.0;     while (value > 1023){value = (value / 1024.0);num++;}    DownSpeed = value.ToString("0.0") + units[num];    OldDown = nowValue;    }private string[] unitAlls = new string[] { "KB", "MB", "GB" ,"TB"};private void CalcAllTraffic(){long nowValue = OldDown+OldUp;    int num = 0;double value = (nowValue- BaseTraffic) / 1024.0;while (value > 1023){value = (value / 1024.0);num++;}   AllTraffic = value.ToString("0.0") + unitAlls[num];}private void Timer_Elapsed(object sender, ElapsedEventArgs e){CalcUpSpeed();CalcDownSpeed();CalcAllTraffic();}}
}

3、胡说八道
  虽然没能直接快速地百度到方法,但是实现这个需求的时候,心里是有个谱,Windows系统能监测到这个网速和流量,没理由实现不了,只需要一个方法将这个信息读取出来就好。最后实现这个需求是利用了System.Net.NetworkInformation这个程序集,但是这个程序集没有只接提供网速监测的方法,而是提供了接收和发送数据量的属性,需要自己计算出即使网速,所以这个网速不是特别的准确。

这个程序集其实一开始就看到了,前辈方法中使用的是IPv4InterfaceStatistics类中的BytesReceived属性和BytesSent属性实现的,但是在这个程序集里没有对应的IPv6类,恍恍惚惚。

IPv4InterfaceStatistics 类

然后呢,我就下意识以为这个程序集比较老旧,不支持IPv6统计信息读取,然后也是各种搜索无果,之后呢不死心想再来研究研究,东点点西瞅瞅,然后在NetworkInterface 类中发现了一个GetIPStatistics()方法,它的描述是“获取此 NetworkInterface 实例的 IP 统计信息。”。

NetworkInterface 类

然后就顺理成章的事了,根据GetIPStatistics()返回的IPInterfaceStatistics实例中的BytesReceived属性和BytesSent属性就能获取到收发的数据总量,然后根据这个信息就能计算出大约的网速。

IPInterfaceStatistics 类

经测试,利用IPInterfaceStatistics实例是能vb.net教程读取到IPv4和IPv6的总数据量的,因为这次的需求就是监测总量,如果需要单独监测IPv6的可以用总量减去IPv4部分。

4、后记
​  老师以前喊我认真念书,我心想有百度还不够吗,再念c#教程能有百度聪明,有百度懂得多,后来渐渐明白,百度懂得多都是前辈的搬砖添瓦来的,共勉。

参考资料
  System.Net.NetworkInformation 命名空间

[经验栈]C#监测IPv4v6网速及流量相关推荐

  1. 浅谈带宽,网速和流量之间的关系

    通常情况下:我们说的带宽10M  20M :现在网速:200KB/s : 使用了8M的流量等,那么带宽.网速.流量之间有什么关系,他们分别代表什么呢? 带宽的统计单位是:比特/秒(bps):10M=1 ...

  2. 宽带和流量是分开的吗_网速、流量、带宽、宽带是一样吗?有什么不同?

    我们几乎每天都在接触网络,而一些词汇是我们时常接触到的,例如网速.流量.带宽.宽带等等.这些词汇的概念我估计没有多少人会在意和想弄明白的,其实也无关重要.不过有时候当你遇到某些与之相关的问题的时候,你 ...

  3. MFC网速及流量监控程序的实现(完)

    要获得及时的网速和流量信息,归根到底还是对经过网卡的数据量的处理.而经过网卡的数据可以根据方向分为两类,一类是进来的,另一类是出去的,确切地说就是上传和下载. 网速是单位时间内的数据量,本质其实还是流 ...

  4. 带宽、网速和流量之间的关系

    通常情况下:我们说的带宽10M  20M   :现在网速网速:200KB/s : 使用了8M的流量等,那么带宽.网速.流量之间有什么关系,他们分别代表什么呢? ①带宽的统计单位是:比特/秒(bps): ...

  5. android中检测网速,Android 流量与网速监测(悬浮窗) 源码

    [实例简介] 对应博文链接:http://blog.csdn.net/yyh352091626/article/details/50599621 Android 实现流量与网速监测(悬浮窗) 源码. ...

  6. linux查看进程占用网速和流量使用情况

    有三个命令vnstat.iftop.nethogs(推荐) 都需要额外安装软件 使用yum或apt-get 一.vnstat使用,查看接口统计报告 vnstat -i eth0 -l #实时流量情况 ...

  7. 手机网速稳定性测试软件,什么手机软件可以监测或测网速的稳定性?

    满意答案 袏掱寫璦 2020.11.02 采纳率:53%    等级:12 已帮助:5542人 云测速是一款实时测试手机网速的工具,包括上传.下载.延迟.抖动.只需轻按一下,短短30 秒内就可完成网络 ...

  8. 设置dns_2019让你的网速飞起来,你需要……设置正确DNS服务篇

    有时候上网明明网络连接正常,但网页访问却很慢?平时会不会经常听到一些老司机说,网络很慢啊可以修改一下DNS啊!什么是DNS?又为什么会对网速产生影响呢?跟着小编的教程一起来学习一下吧~ PART 1  ...

  9. 99%的人都不知道内网、外网、宽带、带宽、流量、网速之间的区别与联系

    大纲结构 一.带宽与宽带的区别是什么? 带宽是量词,指的是网速的大小,比如1Mbps的意思是一兆比特每秒,这个数值就是指带宽. 宽带是名词,说明网络的传输速率很高 .宽带的标准各不相同,最初认为128 ...

最新文章

  1. Android开发:第五日番外——过时的函数和被横杠的函数
  2. webshpere MQ linux 上安装
  3. 如何用C#检查硬盘是否是固态硬盘SSD
  4. nginx php-fpm 输出php错误日志(转)
  5. 差分进化算法_OPTIMUS软件功能特性介绍【全局优化算法模块】
  6. oracle sql优化指导,基于Oracle的sql优化(1)
  7. 学.net还是php,ASP.NET和php哪个更容易学
  8. 【mAP】关于目标检测mAP的一些理解
  9. python环形队列_Python 实现数据结构-循环队列的操作方法
  10. MySQL要不要用函数_2.mysql函数的使用
  11. dataframe groupby_python pandas获取groupby之后的数据
  12. 漏洞扫描器 - cmd命令行执行
  13. 开发软件安装教程-MATLAB2016b安装教程图解
  14. Mybatis Plus 3 oracle 自增序列
  15. ZlycerQan的 八云蓝(ran )
  16. DS18B20 数字温度传感器的使用和基于RT-Thread操作系统的实现
  17. Window7 Chrome 升级提示关闭
  18. 数据库学习之num1
  19. 四款职场效率神器,飞速提高你的工作效率
  20. 【论文阅读】时间序列中的变量是一张知识图谱

热门文章

  1. ionic如何使用第三方iconfont,以及图标微调 (转载)
  2. 【贪心+堆/模拟费用流增广】BZOJ4946 [NOI2017]蔬菜
  3. JavaScript实现爆炸碎片的 图片切换 效果
  4. 获取网页链接里的视频原件
  5. 2019全国大众点评数据更新
  6. 【案例分享】让新时代教育发展与“数”俱进
  7. linux日志切割命令,linux日志分割、去重、统计
  8. Ai作图工业化流程工具
  9. 天涯共此时--中秋赏古诗
  10. Photoshop滤镜给城市夜空添加满天星光