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该版本增加了一个 ...
随机推荐
- 开机流程与主引导分区(MBR)——鸟哥私房菜
在前篇随笔中,已经谈到了CMOS与BIOS,CMOS是记录各项硬件参数(包括系统时间.设备的I/O地址.CPU的电压和频率等)且嵌入到主板上面的存储器,BIOS是一个写入到主板上的韧体(韧体是写入到硬 ...
- HDU 4311 前缀和
Description It has been ten years since TJU-ACM established. And in this year all the retired TJU-AC ...
- ZOJ 1110 Dick and Jane
原题链接 题目大意:Dick和Jane的年龄之和等于他们宠物的年龄,宠物之间的年龄关系XXX. 解法:小学奥数题目,枚举法. 参考代码: #include<iostream> #inclu ...
- c 函数及指针学习 7
1.结构的存储分配 1 2 printf("%d \n",sizeof(char)); printf("%d \n",sizeof(int)); int 类型为 ...
- php部分(查看文件、建立站点、语法变量、变量的几个方法、“全局局部变量的调用”、static、函数参数的作用域);
浏览器查看php文件: 建立站点,浏览php文件: php的语法 <?php echo "Hello World!"; ?> 注释语法: <?php // 这是 ...
- c#部分---用结构体的题目- //请输入班级人数,输入每个人的学号,姓名,和语文分数、数学分数和英语分数(要求使用结构体)
//请输入班级人数,输入每个人的学号,姓名,和语文分数.数学分数和英语分数(要求使用结构体), //求班级里两个语文分数是最高分的学生的所有信息:数学分数是最高分的两个学生的所有信息:英语平均分 建立 ...
- timus 1106 Two Teams(二部图)
Two Teams Time limit: 1.0 secondMemory limit: 64 MB The group of people consists of N members. Every ...
- 利用Web服务器网络打洞
好了有些标题党了.这里想说的是:某些网络,除了http 80服务,其它端口的服务都被限制了,这个时候可以用http web服务器来进行代理转发. 以Apache为例,支持ssh登录到其它服务器的配置如 ...
- IOS中打开应用实现检查更新的功能
//检查更新页面 - (void)Renew{ NSDictionary *infoDic = [[NSBundle mainBundle]infoDictionary]; ...
- Spark 优化器 ML的论文
http://people.csail.mit.edu/matei/papers/2015/sigmod_spark_sql.pdf http://www.vldb.org/pvldb/vol4/p5 ...