本文转载自:http://blog.csdn.net/zhanjianshinian/article/details/8177851

  1. public partial class NetJiankongForm2 : Form
  2. {
  3. public NetJiankongForm2()
  4. {
  5. InitializeComponent();
  6. }
  7. private MyNetWorkMatchClass[] m_MNWMadapters;
  8. private MyNetWorkMonitor monitor;
  9. private void NetJiankongForm2_Load(object sender, EventArgs e)
  10. {
  11. monitor = new MyNetWorkMonitor();
  12. m_MNWMadapters = monitor.Adapters; //获得控制器MyNetWorkMonitor上所有计算机的适配器列表
  13.  
  14. if (m_MNWMadapters.Length == )
  15. {
  16. listBox1.Enabled = false;
  17. MessageBox.Show("在计算机上没有找到网络适配器");
  18. return;
  19. }
  20.  
  21. listBox1.Items.AddRange(m_MNWMadapters);
  22. }
  23.  
  24. private void listBox1_SelectedIndexChanged(object sender, EventArgs e) //选中其中一个适配器
  25. {
  26. monitor.StopMonitoring();
  27. monitor.StartMonitoring(m_MNWMadapters[listBox1.SelectedIndex]); //控制该适配器开始工作
  28. this.timer1.Start(); //计时开始
  29. }
  30.  
  31. private void timer1_Tick(object sender, EventArgs e) //计时开始,用于每秒钟改变显示速度
  32. {
  33.  
  34. MyNetWorkMatchClass adapter = m_MNWMadapters[listBox1.SelectedIndex]; //该适配器
  35. textBox_Down.Text = String.Format("{0:n} kbps", adapter.DownloadSpeedKbps); //得到该适配器的下载速度
  36. textBox_Up.Text = String.Format("{0:n} kbps", adapter.UploadSpeedKbps); //得到该适配器的上传速度
  37. }
  38. }
  39.  
  40. public class MyNetWorkMonitor
  41. {
  42. private System.Timers.Timer Monitor_Timer; // 计时器事件执行每秒钟刷新值在适配器。
  43. private ArrayList m_AdaptersList; //该计算机的适配器列表。
  44. private ArrayList m_MonitoredAdapters; //目前控制的适配器列表
  45.  
  46. public MyNetWorkMonitor()
  47. {
  48. m_AdaptersList = new ArrayList(); //用来保存获取到的计算机的适配器列表
  49. m_MonitoredAdapters = new ArrayList(); //运行的有效的适配器列表
  50.  
  51. ShowNetAdapter(); //列举出安装在该计算机上面的适配器
  52. Monitor_Timer = new System.Timers.Timer();
  53. Monitor_Timer.Elapsed += new ElapsedEventHandler(timer_ElapsedClick);
  54. }
  55. private void timer_ElapsedClick(object sender, ElapsedEventArgs e) //用于每秒钟刷新速度
  56. {
  57. foreach (MyNetWorkMatchClass adapter in m_MonitoredAdapters) //每秒钟遍历有效的网络适配器
  58. {
  59. adapter.CaculateAndRefresh(); //刷新上传下载速度
  60. }
  61.  
  62. }
  63.  
  64. private void ShowNetAdapter() //列举出安装在该计算机上面的适配器方法
  65. {
  66. PerformanceCounterCategory PCCCategory = new PerformanceCounterCategory("Network Interface");
  67. foreach (string InstanceName in PCCCategory.GetInstanceNames())
  68. {
  69. if (InstanceName == "MS TCP Loopback interface")
  70. continue;
  71. // 创建一个实例Net workAdapter类别,并创建性能计数器它。
  72. MyNetWorkMatchClass myMNWMadapter = new MyNetWorkMatchClass(InstanceName);
  73. myMNWMadapter.m_Performance_Down = new PerformanceCounter("Network Interface", "Bytes Received/sec", InstanceName);
  74. myMNWMadapter.m_Performance_Up = new PerformanceCounter("Network Interface", "Bytes Sent/sec", InstanceName);
  75. m_AdaptersList.Add(myMNWMadapter);
  76. }
  77. }
  78.  
  79. public void StartMonitoring()
  80. {
  81. if (m_AdaptersList.Count > )
  82. {
  83. foreach (MyNetWorkMatchClass myMNWMadapter in m_AdaptersList)
  84. if (!m_MonitoredAdapters.Contains(myMNWMadapter))
  85. {
  86. m_MonitoredAdapters.Add(myMNWMadapter);
  87. myMNWMadapter.Start();
  88. }
  89.  
  90. Monitor_Timer.Enabled = true;
  91. }
  92. }
  93.  
  94. public void StartMonitoring(MyNetWorkMatchClass myMNWMadapter) //控制该适配器开始工作
  95. {
  96. if (!m_MonitoredAdapters.Contains(myMNWMadapter))
  97. {
  98. m_MonitoredAdapters.Add(myMNWMadapter);
  99. myMNWMadapter.Start(); //该适配器调用自己函数开始工作
  100. }
  101. Monitor_Timer.Enabled = true;
  102. }
  103.  
  104. public void StopMonitoring()
  105. {
  106. m_MonitoredAdapters.Clear();
  107. Monitor_Timer.Enabled = false;
  108. }
  109.  
  110. public void StopMonitoring(MyNetWorkMatchClass adapter)
  111. {
  112. if (m_MonitoredAdapters.Contains(adapter))
  113. m_MonitoredAdapters.Remove(adapter);
  114. if (m_MonitoredAdapters.Count == )
  115. Monitor_Timer.Enabled = false;
  116. }
  117.  
  118. public MyNetWorkMatchClass[] Adapters //该控制类所控制的找出所有适配器的适配器列表
  119. {
  120. get
  121. {
  122. return (MyNetWorkMatchClass[])m_AdaptersList.ToArray(typeof(MyNetWorkMatchClass));
  123. }
  124. }
  125. }
  126.  
  127. //一个安装在计算机上的网络适配器,该类可用于获取网络中的流量
  128. public class MyNetWorkMatchClass
  129. {
  130. public override string ToString()
  131. {
  132. return m_strMatchName;
  133. }
  134. public string strMatchName
  135. {
  136. get
  137. {
  138. return m_strMatchName;
  139. }
  140. }
  141. public long DownloadSpeed
  142. {
  143. get
  144. {
  145. return m_lDownLoadSpeed;
  146. }
  147. }
  148. public long UploadSpeed
  149. {
  150. get
  151. {
  152. return m_lUpLoadSpeed;
  153. }
  154. }
  155. public double DownloadSpeedKbps
  156. {
  157. get
  158. {
  159. return this.m_lUpLoadSpeed / 1024.0;
  160. }
  161. }
  162.  
  163. public double UploadSpeedKbps
  164. {
  165. get
  166. {
  167. return this.m_lUpLoadSpeed / 1024.0;
  168. }
  169. }
  170. private long m_lDownLoadNetValues1; //当前的下载速度,字节计算
  171. private long m_lUploadNetValues1; //当前的上传速度
  172. private long m_lDownLoadNetValues2; //一秒前的下载速度,字节计算
  173. private long m_lUploadNetValues2; //一秒前的上传速度
  174.  
  175. private string m_strMatchName; //此适配器的名字
  176. internal PerformanceCounter m_Performance_Down; //控制下载速度的流量计算中心
  177. internal PerformanceCounter m_Performance_Up; // //控制上传速度的流量计算中心
  178.  
  179. private long m_lDownLoadSpeed; //每秒钟下载速度
  180. private long m_lUpLoadSpeed; //每秒钟上传速度
  181. public MyNetWorkMatchClass(string strComputerNetName)
  182. {
  183. m_lDownLoadNetValues1 = ;
  184. m_strMatchName = strComputerNetName;
  185. m_lUploadNetValues1 = ;
  186. m_lDownLoadNetValues2 = ;
  187. m_lUploadNetValues2 = ;
  188.  
  189. }
  190. //该适配器准备控制的方法函数
  191. public void Start()
  192. {
  193. m_lUploadNetValues1 = m_Performance_Up.NextSample().RawValue;
  194. m_lDownLoadNetValues1 = m_Performance_Down.NextSample().RawValue;
  195.  
  196. }
  197.  
  198. public void CaculateAndRefresh() //计算速度
  199. {
  200. m_lDownLoadNetValues2 = m_Performance_Down.NextSample().RawValue;
  201. m_lUploadNetValues2 = m_Performance_Up.NextSample().RawValue;
  202.  
  203. m_lDownLoadSpeed = m_lDownLoadNetValues2 - m_lDownLoadNetValues1;
  204. m_lUpLoadSpeed = m_lUploadNetValues2 - m_lUploadNetValues1;
  205.  
  206. m_lDownLoadNetValues1 = m_lDownLoadNetValues2;
  207. m_lUploadNetValues1 = m_lUploadNetValues2;
  208. }
  209.  
  210. }

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. Sqlserver CheckPoint 在三种恢复模式中的不同表现

    准备: 日志截断在下列情况下发生: 1.执行完 BACKUP LOG 语句时.2.在每次处理检查点时(如果数据库使用的是简单恢复模式).这包括 CHECKPOINT 语句所产生的显式检查点和系统生成的 ...

  2. CoreOS 835.12.0 稳定版安装

    导读 CoreOS是一个基于Docker的轻量级容器化Linux发行版,为Docker而生,CoreOS作为Docker生态圈中的重要一员,日益得到各大云服务商的重视,发展风头正劲. CoreOS宣称 ...

  3. MVC&WebForm对照学习:文件上传(以图片为例)

    原文  http://www.tuicool.com/articles/myM7fe 主题 HTMLMVC模式Asp.net 博客园::首页::  ::  ::  ::管理 5 Posts :: 0 ...

  4. python 函数基础

    定义: def intersect(seq1,seq2): res = [] for x in seq1: if x in seq2: res.append(x) yield res 运行效果 > ...

  5. socket 简介

    对TCP/IP.UDP.Socket编程这些词你不会很陌生吧?随着网络技术的发展,这些词充斥着我们的耳朵.那么我想问: 1.         什么是TCP/IP.UDP?2.         Sock ...

  6. ztong上机3

    二.实验名称:数字图像处理matlab上机 三.实验学时:2学时 四.实验目的:(详细填写) 掌握几何变换 掌握插值 理解配准的概念 五.实验内容 (1)首先自己写一个对图像进行旋转和缩放的复合变换程 ...

  7. MATLAB符号运算

    1.符号运算 使用MATLAB可以进行多项式乘除运算,也可以进行因式分解. 例1. 多项式乘除运算(x+3)3 >> syms x;>> expand((x+3)^3) ans ...

  8. Blob 构造函数

    Blob 构造函数使 Web 开发人员可直接在客户端上创建或操作 Blob(经常等效于一个文件). 该构造函数在 W3C 的文件 API 规范中进行定义,该规范目前尚处于工作草案阶段.在较早版本的文件 ...

  9. 卸载linux自带版本JDK

    1)卸载系统自带的jdk版本:    查看自带的jdk:    #rpm -qa|grep gcj    可能看到如下类似的信息:    libgcj-4.1.2-44.el5    java-1.4 ...

  10. google-http-java-client(android学习篇2源码)

    package com.google.api.services.samples.googleplus.cmdline.simple;   import com.google.api.client.ht ...