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