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该版本增加了一个 ...
随机推荐
- js千分位的函数
不错的js千分位函数,适用于将金额每3位用“,”分隔 /*for price using thousands separator */ function fprice(s,n){ s = parseF ...
- linux性能监控基础命令
压力测试监控下系统性能方法之一 #top 该命令监控的是进程的信息 看图逐行意义 top:执行命令的之间 up:已经执行了277天 2users:目前有两个使用者,使用#who可以查看具体的使用者详情 ...
- github for windows 安装失败解决方案(亲测)
早之前就有接触github,也在公司机子上装过,一路下来挺顺畅的.夏老师还纳闷他的机子装不上,我说,有鬼! 然而时隔一个月自己再来装,却在自己的本本上遇到鬼了. 然而网上论坛收了一堆,各种试.果断放弃 ...
- Sql 2000丢失sa 密码,重置sa密码
重置密码需要勾选一个授权 在企业管理器中-->服务器设置——>勾选“运行对系统目录直接进行修改” 勾选后就可以重置密码了. /////////////////// 详细: http://w ...
- SM30维护视图添加按钮
转自http://blog.csdn.net/tsj19881202/article/details/7517232 遇到某需求,要求维护sm30的视图时,能加上排序按钮. 基本参考: http:// ...
- PR 创建
REPORT Z_CREATE_PR. DATA: BEGIN OF GT_DATA1 OCCURS 0, BSART TYPE STRING, "凭证类型 ...
- 使用move_base导航 ---13
摘要: 原创博客:转载请表明出处:http://www.cnblogs.com/zxouxuewei/ 我们现在准备用move_base简单的移动机器人记住,一个“pose”在ros的意思是一个位置和 ...
- PHP字符串
<?php $string1 = <<<EVILXR 我有一只小毛驴,我从来也不骑. 有一天我心血来潮,骑着去赶集. 我手里拿着小皮鞭,我心里正得意. 不知怎么哗啦啦啦啦,我摔 ...
- kuangbin_ShortPath J (POJ 1511)
其实虽然一开始有被这个题的8000MS 和 256MB限制又被吓到 但是严格来说跟之前的POJ 3268是一样的做法只是数据大了点 但是问题就出在数据大了点上 其实严格来说也不大 1e6 数组加起来大 ...
- C++@语句块
#include <iostream> using namespace std; int main() { { int x=1; cout << x << endl ...