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 == 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;
            }
        }
        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 = 0;
            m_strMatchName = strComputerNetName;
            m_lUploadNetValues1 = 0;
            m_lDownLoadNetValues2 = 0;
            m_lUploadNetValues2 = 0;

        }
        //該適配器准備控制的方法函數
        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;
        }
   
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM