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该版本增加了一个 ...
随机推荐
- MapBox TileMill
TileMill 学习网站: Walkthrough: Creating tiles with Mapnik using TileMill TileMill 快速入门 Cartography With ...
- Link Aggregation and LACP with Open vSwitch
In this post, I’m going to show you how to use link aggregation (via the Link Aggregation Control Pr ...
- sgu259 Printed PR 贪心
link:http://acm.sgu.ru/problem.php?contest=0&problem=259 思路就是贪心. 首先要读懂题目,输入的方式,把样例读懂. 第一,打印的总时间一 ...
- JavaWeb学习记录(六)——用户登录功能之Session与验证码验证功能的实现
一.产生验证码的工具类 package blank.util; import java.awt.Color;import java.awt.Graphics;import java.awt.image ...
- HDU 1087 Super Jumping! Jumping! Jumping
HDU 1087 题目大意:给定一个序列,只能走比当前位置大的位置,不可回头,求能得到的和的最大值.(其实就是求最大上升(可不连续)子序列和) 解题思路:可以定义状态dp[i]表示以a[i]为结尾的上 ...
- 《Java程序设计》第4周学习总结
学号20145220 <Java程序设计>第4周学习总结 6.1.1 继承共同行为 •定义:继承基本上就是避免多个类间重复定义共同行为. •优点:1.提高了代码的复用性.2.让类与类之间产 ...
- phpwind数据同步本地之后板块排版乱
排版紊乱的问题一般是css文件的问题 解决思路 1.打开chrome调用F12,查看是不是css文件没有获取. 2.如果没有获取到的话检查css文件的路径. 在本例中phpwind数据同步到本地之后, ...
- SVN代码提交冲突解决方案
SVN代码提交冲突解决方案 1.若你的代码被其他人修改并提交过了,期间你自己也修改过该文件,UPDATE的时候自己代码被覆盖. 右键——>显示日志 查看该文件的更新记录 找到需恢复的版本 右键— ...
- poj2492 带权并查集
题意:研究一种生物,有n个生物个体,发现有一些之间进行了交配,给出了这些关系,问是否有同性恋的bug出现. 用0\1表示某元素和其祖先元素的性别关系,0 为相同,1 为不同,用 mod2 实现累计处理 ...
- [hdu 3605]Escape
这题的做法非常直观,却又非常不直观 先容许我吐一下槽吧~作者你的英语是读到火星上去了喵? 题目大体是说人类要移民,然后有 n 个人, m 个星球 每个人都有 m 个 0 . 1 数码表示他能否移民到该 ...