C#实现监控网络流量

 

  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 == 0)
            {
                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(1000);
            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 > 0)
            {
                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 == 0)
                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;
            }
        }
      

你可能感兴趣的:(C#实现监控网络流量)