C#实现监控网络流量
本文转载自:http://blog.csdn.net/zhanjianshinian/article/details/8177851
- public partial class NetJiankongForm2 : Form
- {
- public NetJiankongForm2()
- {
- InitializeComponent();
- }
- private MyNetWorkMatchClass[] m_MNWMadapters;
- private MyNetWorkMonitor monitor;
- private void NetJiankongForm2_Load(object sender, EventArgs e)
- {
- monitor = new MyNetWorkMonitor();
- m_MNWMadapters = monitor.Adapters; //获得控制器MyNetWorkMonitor上所有计算机的适配器列表
- if (m_MNWMadapters.Length == )
- {
- listBox1.Enabled = false;
- MessageBox.Show("在计算机上没有找到网络适配器");
- return;
- }
- listBox1.Items.AddRange(m_MNWMadapters);
- }
- private void listBox1_SelectedIndexChanged(object sender, EventArgs e) //选中其中一个适配器
- {
- monitor.StopMonitoring();
- monitor.StartMonitoring(m_MNWMadapters[listBox1.SelectedIndex]); //控制该适配器开始工作
- this.timer1.Start(); //计时开始
- }
- private void timer1_Tick(object sender, EventArgs e) //计时开始,用于每秒钟改变显示速度
- {
- MyNetWorkMatchClass adapter = m_MNWMadapters[listBox1.SelectedIndex]; //该适配器
- textBox_Down.Text = String.Format("{0:n} kbps", adapter.DownloadSpeedKbps); //得到该适配器的下载速度
- textBox_Up.Text = String.Format("{0:n} kbps", adapter.UploadSpeedKbps); //得到该适配器的上传速度
- }
- }
- public class MyNetWorkMonitor
- {
- private System.Timers.Timer Monitor_Timer; // 计时器事件执行每秒钟刷新值在适配器。
- private ArrayList m_AdaptersList; //该计算机的适配器列表。
- private ArrayList m_MonitoredAdapters; //目前控制的适配器列表
- public MyNetWorkMonitor()
- {
- m_AdaptersList = new ArrayList(); //用来保存获取到的计算机的适配器列表
- m_MonitoredAdapters = new ArrayList(); //运行的有效的适配器列表
- ShowNetAdapter(); //列举出安装在该计算机上面的适配器
- Monitor_Timer = new System.Timers.Timer();
- Monitor_Timer.Elapsed += new ElapsedEventHandler(timer_ElapsedClick);
- }
- private void timer_ElapsedClick(object sender, ElapsedEventArgs e) //用于每秒钟刷新速度
- {
- foreach (MyNetWorkMatchClass adapter in m_MonitoredAdapters) //每秒钟遍历有效的网络适配器
- {
- adapter.CaculateAndRefresh(); //刷新上传下载速度
- }
- }
- private void ShowNetAdapter() //列举出安装在该计算机上面的适配器方法
- {
- PerformanceCounterCategory PCCCategory = new PerformanceCounterCategory("Network Interface");
- foreach (string InstanceName in PCCCategory.GetInstanceNames())
- {
- if (InstanceName == "MS TCP Loopback interface")
- continue;
- // 创建一个实例Net workAdapter类别,并创建性能计数器它。
- MyNetWorkMatchClass myMNWMadapter = new MyNetWorkMatchClass(InstanceName);
- myMNWMadapter.m_Performance_Down = new PerformanceCounter("Network Interface", "Bytes Received/sec", InstanceName);
- myMNWMadapter.m_Performance_Up = new PerformanceCounter("Network Interface", "Bytes Sent/sec", InstanceName);
- m_AdaptersList.Add(myMNWMadapter);
- }
- }
- public void StartMonitoring()
- {
- if (m_AdaptersList.Count > )
- {
- foreach (MyNetWorkMatchClass myMNWMadapter in m_AdaptersList)
- if (!m_MonitoredAdapters.Contains(myMNWMadapter))
- {
- m_MonitoredAdapters.Add(myMNWMadapter);
- myMNWMadapter.Start();
- }
- Monitor_Timer.Enabled = true;
- }
- }
- public void StartMonitoring(MyNetWorkMatchClass myMNWMadapter) //控制该适配器开始工作
- {
- if (!m_MonitoredAdapters.Contains(myMNWMadapter))
- {
- m_MonitoredAdapters.Add(myMNWMadapter);
- myMNWMadapter.Start(); //该适配器调用自己函数开始工作
- }
- Monitor_Timer.Enabled = true;
- }
- public void StopMonitoring()
- {
- m_MonitoredAdapters.Clear();
- Monitor_Timer.Enabled = false;
- }
- public void StopMonitoring(MyNetWorkMatchClass adapter)
- {
- if (m_MonitoredAdapters.Contains(adapter))
- m_MonitoredAdapters.Remove(adapter);
- if (m_MonitoredAdapters.Count == )
- Monitor_Timer.Enabled = false;
- }
- public MyNetWorkMatchClass[] Adapters //该控制类所控制的找出所有适配器的适配器列表
- {
- get
- {
- return (MyNetWorkMatchClass[])m_AdaptersList.ToArray(typeof(MyNetWorkMatchClass));
- }
- }
- }
- //一个安装在计算机上的网络适配器,该类可用于获取网络中的流量
- public class MyNetWorkMatchClass
- {
- public override string ToString()
- {
- return m_strMatchName;
- }
- public string strMatchName
- {
- get
- {
- return m_strMatchName;
- }
- }
- public long DownloadSpeed
- {
- get
- {
- return m_lDownLoadSpeed;
- }
- }
- public long UploadSpeed
- {
- get
- {
- return m_lUpLoadSpeed;
- }
- }
- public double DownloadSpeedKbps
- {
- get
- {
- return this.m_lUpLoadSpeed / 1024.0;
- }
- }
- public double UploadSpeedKbps
- {
- get
- {
- return this.m_lUpLoadSpeed / 1024.0;
- }
- }
- private long m_lDownLoadNetValues1; //当前的下载速度,字节计算
- private long m_lUploadNetValues1; //当前的上传速度
- private long m_lDownLoadNetValues2; //一秒前的下载速度,字节计算
- private long m_lUploadNetValues2; //一秒前的上传速度
- private string m_strMatchName; //此适配器的名字
- internal PerformanceCounter m_Performance_Down; //控制下载速度的流量计算中心
- internal PerformanceCounter m_Performance_Up; // //控制上传速度的流量计算中心
- private long m_lDownLoadSpeed; //每秒钟下载速度
- private long m_lUpLoadSpeed; //每秒钟上传速度
- public MyNetWorkMatchClass(string strComputerNetName)
- {
- m_lDownLoadNetValues1 = ;
- m_strMatchName = strComputerNetName;
- m_lUploadNetValues1 = ;
- m_lDownLoadNetValues2 = ;
- m_lUploadNetValues2 = ;
- }
- //该适配器准备控制的方法函数
- public void Start()
- {
- m_lUploadNetValues1 = m_Performance_Up.NextSample().RawValue;
- m_lDownLoadNetValues1 = m_Performance_Down.NextSample().RawValue;
- }
- public void CaculateAndRefresh() //计算速度
- {
- m_lDownLoadNetValues2 = m_Performance_Down.NextSample().RawValue;
- m_lUploadNetValues2 = m_Performance_Up.NextSample().RawValue;
- m_lDownLoadSpeed = m_lDownLoadNetValues2 - m_lDownLoadNetValues1;
- m_lUpLoadSpeed = m_lUploadNetValues2 - m_lUploadNetValues1;
- m_lDownLoadNetValues1 = m_lDownLoadNetValues2;
- m_lUploadNetValues1 = m_lUploadNetValues2;
- }
- }
C#实现监控网络流量的更多相关文章
- 运用Ntop监控网络流量(视频Demo)
运用Ntop监控网络流量 ____网络流量反映了网络的运行状态,是判别网络运行是否正常的关键数据,在实际的网络中,如果对网络流量控制得不好或发生网络拥塞,将会导致网络吞吐量下降.网络性能降低.通过流量 ...
- ubuntu下使用nethogs监控网络流量
NetHogs是一款小巧免费的开源命令行工具,用来按进程或程序实时统计网络带宽使用率. 对于使用类似于“repo tool”.“depot_tools”等工具checkout源码时非常有用,可以查看当 ...
- Ntop监控网络流量
运用Ntop监控网络流量 ____ 网络流量反映了网络的运行状态,是判别网络运行是否正常的关键数据,在实际的网络中,如果对网络流量控制得不好或发生网络拥塞,将会导致网络吞吐量下降. 网络性能降低.通过 ...
- mrtg监控网络流量简单配置
Mrtg服务器搭建(监控网络流量) [日期:2012-07-03] 来源:Linux社区 作者:split_two [字体:大 中 小] [实验环境] 监控机:Red Hat linux 5.3 ...
- linux下脚本监控网络流量
linux下脚本监控网络流量 学习了:https://blog.csdn.net/chenghuikai/article/details/48437479 学习了:http://www.jb51.ne ...
- Linux服务器上监控网络带宽的18个常用命令nload, iftop,iptraf-ng, nethogs, vnstat. nagios,运用Ntop监控网络流量
Linux服务器上监控网络带宽的18个常用命令 本文介绍了一些可以用来监控网络使用情况的Linux命令行工具.这些工具可以监控通过网络接口传输的数据,并测量目前哪些数据所传输的速度.入站流量和出站流量 ...
- 监控网络流量iftop和nethogs安装
服务器环境是centos7,centos下通常使用iftop,或者nethogs来进行网络流量监控.这2个工具都需要先安装epel,因为这个库通常操作系统是不自带的.那么就先安装epel,使用的命令是 ...
- centos8平台基于iftop监控网络流量
一,iftop的作用: 基于ip统计外部机器与本机之间的网络流量, 可以方便的查看各客户端是否有非正常的到本机的访问 说明:刘宏缔的架构森林是一个专注架构的博客,地址:https://www.cnbl ...
- Linux图形化监控网络流量:speedometer查看流量
Speedometer是一个带宽控制台和对数带宽显示的文件下载进度监控,以及一个简单的命令行界面.其目的是测量和显示网络连接或数据存储在文件中的数据率. Speedometer 2.8该版本增加了一个 ...
随机推荐
- Sqlserver CheckPoint 在三种恢复模式中的不同表现
准备: 日志截断在下列情况下发生: 1.执行完 BACKUP LOG 语句时.2.在每次处理检查点时(如果数据库使用的是简单恢复模式).这包括 CHECKPOINT 语句所产生的显式检查点和系统生成的 ...
- CoreOS 835.12.0 稳定版安装
导读 CoreOS是一个基于Docker的轻量级容器化Linux发行版,为Docker而生,CoreOS作为Docker生态圈中的重要一员,日益得到各大云服务商的重视,发展风头正劲. CoreOS宣称 ...
- MVC&WebForm对照学习:文件上传(以图片为例)
原文 http://www.tuicool.com/articles/myM7fe 主题 HTMLMVC模式Asp.net 博客园::首页:: :: :: ::管理 5 Posts :: 0 ...
- python 函数基础
定义: def intersect(seq1,seq2): res = [] for x in seq1: if x in seq2: res.append(x) yield res 运行效果 > ...
- socket 简介
对TCP/IP.UDP.Socket编程这些词你不会很陌生吧?随着网络技术的发展,这些词充斥着我们的耳朵.那么我想问: 1. 什么是TCP/IP.UDP?2. Sock ...
- ztong上机3
二.实验名称:数字图像处理matlab上机 三.实验学时:2学时 四.实验目的:(详细填写) 掌握几何变换 掌握插值 理解配准的概念 五.实验内容 (1)首先自己写一个对图像进行旋转和缩放的复合变换程 ...
- MATLAB符号运算
1.符号运算 使用MATLAB可以进行多项式乘除运算,也可以进行因式分解. 例1. 多项式乘除运算(x+3)3 >> syms x;>> expand((x+3)^3) ans ...
- Blob 构造函数
Blob 构造函数使 Web 开发人员可直接在客户端上创建或操作 Blob(经常等效于一个文件). 该构造函数在 W3C 的文件 API 规范中进行定义,该规范目前尚处于工作草案阶段.在较早版本的文件 ...
- 卸载linux自带版本JDK
1)卸载系统自带的jdk版本: 查看自带的jdk: #rpm -qa|grep gcj 可能看到如下类似的信息: libgcj-4.1.2-44.el5 java-1.4 ...
- google-http-java-client(android学习篇2源码)
package com.google.api.services.samples.googleplus.cmdline.simple; import com.google.api.client.ht ...