本文转载自: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#实现监控网络流量的更多相关文章

  1. 运用Ntop监控网络流量(视频Demo)

    运用Ntop监控网络流量 ____网络流量反映了网络的运行状态,是判别网络运行是否正常的关键数据,在实际的网络中,如果对网络流量控制得不好或发生网络拥塞,将会导致网络吞吐量下降.网络性能降低.通过流量 ...

  2. ubuntu下使用nethogs监控网络流量

    NetHogs是一款小巧免费的开源命令行工具,用来按进程或程序实时统计网络带宽使用率. 对于使用类似于“repo tool”.“depot_tools”等工具checkout源码时非常有用,可以查看当 ...

  3. Ntop监控网络流量

    运用Ntop监控网络流量 ____ 网络流量反映了网络的运行状态,是判别网络运行是否正常的关键数据,在实际的网络中,如果对网络流量控制得不好或发生网络拥塞,将会导致网络吞吐量下降. 网络性能降低.通过 ...

  4. mrtg监控网络流量简单配置

    Mrtg服务器搭建(监控网络流量) [日期:2012-07-03] 来源:Linux社区  作者:split_two [字体:大 中 小]   [实验环境] 监控机:Red Hat linux 5.3 ...

  5. linux下脚本监控网络流量

    linux下脚本监控网络流量 学习了:https://blog.csdn.net/chenghuikai/article/details/48437479 学习了:http://www.jb51.ne ...

  6. Linux服务器上监控网络带宽的18个常用命令nload, iftop,iptraf-ng, nethogs, vnstat. nagios,运用Ntop监控网络流量

    Linux服务器上监控网络带宽的18个常用命令 本文介绍了一些可以用来监控网络使用情况的Linux命令行工具.这些工具可以监控通过网络接口传输的数据,并测量目前哪些数据所传输的速度.入站流量和出站流量 ...

  7. 监控网络流量iftop和nethogs安装

    服务器环境是centos7,centos下通常使用iftop,或者nethogs来进行网络流量监控.这2个工具都需要先安装epel,因为这个库通常操作系统是不自带的.那么就先安装epel,使用的命令是 ...

  8. centos8平台基于iftop监控网络流量

    一,iftop的作用: 基于ip统计外部机器与本机之间的网络流量, 可以方便的查看各客户端是否有非正常的到本机的访问 说明:刘宏缔的架构森林是一个专注架构的博客,地址:https://www.cnbl ...

  9. Linux图形化监控网络流量:speedometer查看流量

    Speedometer是一个带宽控制台和对数带宽显示的文件下载进度监控,以及一个简单的命令行界面.其目的是测量和显示网络连接或数据存储在文件中的数据率. Speedometer 2.8该版本增加了一个 ...

随机推荐

  1. linux定时

    linux怎样启动定时任务 crontab -e进入以后的,定时任务写入 */1 * * * * /usr/bin/python /root/lianxi/time_1.py ,每一分钟定时执行tim ...

  2. 动态数组 - ArrayList

    前言 如果数组的大小要随时间变化,那么数组操作起来就比较麻烦. 在C++中,这种情况要用到动态向量Vector. 而Java中,提供了一种叫做ArrayList的泛型数组结构类型,提供相似的作用. 其 ...

  3. 多进程和atexit清理函数

    前言: 最近帮朋友review其模块服务代码, 使用的是python的twisted网络框架. 鉴于之前并没有使用过, 于是决定好好研究一番. 不过这个问题, 和twisted网络框架本身没有关系, ...

  4. List-ApI及详解

    1.API : add(Object o) remove(Object o) clear() indexOf(Object o) get(int i) size() iterator() isEmpt ...

  5. CSS控制a标签链接的四种状态

    /*CSS链接的四种状态 *a:link 普通的.未被访问的链接样式 *a:visited 用户已访问的链接样式 *a:hover 鼠标指针位于链接上方样式 *a:active 链接被点击的时刻样式 ...

  6. tyvj1013 - 找啊找啊找GF ——二维背包变种

    题目链接:https://www.tyvj.cn/Problem_Show.aspx?id=1013 好吧,这题没节操=_= 状态f[u,v,i]表示:消费u的人民币和v的人品同时泡到i个mm所需要的 ...

  7. C陷阱与缺陷 1

    1,符号之间的空白被忽略 符号中间不能嵌入空白 2,词法分析中的贪心法 a---b 和 a-- -b相同 和 a- --b不同 1 a=b/*p //根据贪心法 /*被解释成 注释符,便不再往下读,直 ...

  8. img元素底部有空白间距的问题

    <div style="width:100px;height:100px"><img src="./1.jpg"></div> ...

  9. 排序算法总结(一)插入排序【Insertion Sort】

    最近在忙着找工作,以前看的排序算法都忘记了,悲剧啦T  T现在来回顾一下吧. 这边推荐一个算法可视化的网站,非常有用.http://visualgo.net/ 一.插入排序的思想(Wikipedia) ...

  10. windows下多个python版本共存

    方法/步骤   首先当然是安装你需要的两个不同版本的python,这里我安装的是2.7和3.3的,两个版本安装顺序无所谓.   接下来就是检查环境变量,缺少的我们需要添加.先找到环境变量的位置.   ...