[经验栈]C#监测IPv4v6网速及流量
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网速及流量相关推荐
- 浅谈带宽,网速和流量之间的关系
通常情况下:我们说的带宽10M 20M :现在网速:200KB/s : 使用了8M的流量等,那么带宽.网速.流量之间有什么关系,他们分别代表什么呢? 带宽的统计单位是:比特/秒(bps):10M=1 ...
- 宽带和流量是分开的吗_网速、流量、带宽、宽带是一样吗?有什么不同?
我们几乎每天都在接触网络,而一些词汇是我们时常接触到的,例如网速.流量.带宽.宽带等等.这些词汇的概念我估计没有多少人会在意和想弄明白的,其实也无关重要.不过有时候当你遇到某些与之相关的问题的时候,你 ...
- MFC网速及流量监控程序的实现(完)
要获得及时的网速和流量信息,归根到底还是对经过网卡的数据量的处理.而经过网卡的数据可以根据方向分为两类,一类是进来的,另一类是出去的,确切地说就是上传和下载. 网速是单位时间内的数据量,本质其实还是流 ...
- 带宽、网速和流量之间的关系
通常情况下:我们说的带宽10M 20M :现在网速网速:200KB/s : 使用了8M的流量等,那么带宽.网速.流量之间有什么关系,他们分别代表什么呢? ①带宽的统计单位是:比特/秒(bps): ...
- android中检测网速,Android 流量与网速监测(悬浮窗) 源码
[实例简介] 对应博文链接:http://blog.csdn.net/yyh352091626/article/details/50599621 Android 实现流量与网速监测(悬浮窗) 源码. ...
- linux查看进程占用网速和流量使用情况
有三个命令vnstat.iftop.nethogs(推荐) 都需要额外安装软件 使用yum或apt-get 一.vnstat使用,查看接口统计报告 vnstat -i eth0 -l #实时流量情况 ...
- 手机网速稳定性测试软件,什么手机软件可以监测或测网速的稳定性?
满意答案 袏掱寫璦 2020.11.02 采纳率:53% 等级:12 已帮助:5542人 云测速是一款实时测试手机网速的工具,包括上传.下载.延迟.抖动.只需轻按一下,短短30 秒内就可完成网络 ...
- 设置dns_2019让你的网速飞起来,你需要……设置正确DNS服务篇
有时候上网明明网络连接正常,但网页访问却很慢?平时会不会经常听到一些老司机说,网络很慢啊可以修改一下DNS啊!什么是DNS?又为什么会对网速产生影响呢?跟着小编的教程一起来学习一下吧~ PART 1 ...
- 99%的人都不知道内网、外网、宽带、带宽、流量、网速之间的区别与联系
大纲结构 一.带宽与宽带的区别是什么? 带宽是量词,指的是网速的大小,比如1Mbps的意思是一兆比特每秒,这个数值就是指带宽. 宽带是名词,说明网络的传输速率很高 .宽带的标准各不相同,最初认为128 ...
最新文章
- 炼数成金数据分析课程---8、数据清洗
- vue-cli打包构建时常见的报错解决方案
- Java Programming Test Question 3
- 【H.264/AVC视频编解码技术具体解释】十三、熵编码算法(4):H.264使用CAVLC解析宏块的残差数据...
- GDB 远程调试Linux (CentOS)
- Jib –为Spring Boot应用程序构建docker映像
- 骨干云池存储方式_你好,我存个对象(大误)漫谈对象存储
- android 扫描照片功能,巧把安卓手机打造成扫描仪:拍照识别文档、手写笔记转PDF(图)...
- 面试被问到HashMap 底层原理?看完这边文章绝对不慌!
- 微信小程序_for循环
- 简单三步快速实现内网穿透
- 常微分方程的差分方法C语言,常微分方程差分方法.ppt
- Python:打印九九乘法口诀表
- Git 各指令的本质,真的是通俗易懂!
- 布莱克斯科尔斯模型(一)
- 多项式:从什么都不知道到门都没入
- Kettle邮件发送
- 【阿里2013实习笔试】找明星
- Powershell免杀
- Linux下如何查看系统启动时间和运行时间以及安装时间