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. 炼数成金数据分析课程---8、数据清洗
  2. vue-cli打包构建时常见的报错解决方案
  3. Java Programming Test Question 3
  4. 【H.264/AVC视频编解码技术具体解释】十三、熵编码算法(4):H.264使用CAVLC解析宏块的残差数据...
  5. GDB 远程调试Linux (CentOS)
  6. Jib –为Spring Boot应用程序构建docker映像
  7. 骨干云池存储方式_你好,我存个对象(大误)漫谈对象存储
  8. android 扫描照片功能,巧把安卓手机打造成扫描仪:拍照识别文档、手写笔记转PDF(图)...
  9. 面试被问到HashMap 底层原理?看完这边文章绝对不慌!
  10. 微信小程序_for循环
  11. 简单三步快速实现内网穿透
  12. 常微分方程的差分方法C语言,常微分方程差分方法.ppt
  13. Python:打印九九乘法口诀表
  14. Git 各指令的本质,真的是通俗易懂!
  15. 布莱克斯科尔斯模型(一)
  16. 多项式:从什么都不知道到门都没入
  17. Kettle邮件发送
  18. 【阿里2013实习笔试】找明星
  19. Powershell免杀
  20. Linux下如何查看系统启动时间和运行时间以及安装时间

热门文章

  1. 【首次起用黑人模特的Prada】
  2. 理解Session State模式+FAQ [翻译]
  3. 2023杭州之江中复百日誓师动员大会
  4. 如何在Google表格中添加当前日期和时间
  5. ❥挑灯夜读系列❥-- 软件设计师考试躺过攻略(2021年下半年)
  6. 业务范围(business area)
  7. Zotero使用OneDrive云存储附件(OneDrive+Zotero)
  8. php能做指纹信息的,指纹在生活中的用途有哪些
  9. 30天自制操作系统——第四天使用C语言制作操作系统进度条
  10. 区块链技术要用到什么开发语言?