心静自然凉~

一杯清茶、二盏淡酒、邀三五知己,诉七八句心语,道九分珍重,怀十分真诚,或伤感、或快乐,无现实之隔阂 、无世俗之势利,如此人生,不亦乐乎!

导航

网络流量监控程序

Posted on 2007-12-19 21:53  Leo.Zhu  阅读(5900)  评论(4编辑  收藏  举报

先传一个图片上来吧。


实现方法 :

这个程序的实现的方法主要使用WMI的方式,动态的获取WMI中的资料。并计算得出结果显示到界面中。


主要使用的WMI的类是:Win32_PerfRawData_Tcpip_NetworkInterface,Win32_NetworkAdapter

先通过Win32_NetworkAdapter 获取到计算机中的所有的网络适配器的名称。然后选择不同的名称后,动态的获取底层的资料。

获取计算机上适配器的方法如下:

IList<Win32_NetworkAdapter> NetwordItems = null;
NetworkAdapter NA = null;
NA = new NetworkAdapter(ComputerName);
NetwordItems = NA.SelectAll();

foreach (Win32_NetworkAdapter item in NetwordItems)
{
string s = item.AdapterType;
if (s != null)
{
if (item.ServiceName == "PptpMiniport")
{
continue;
}
UpNetItems(item.NetConnectionID,item.Name);
}
}

计算网速的主要算法如下:

pni.m_where = " where Name = '" + result + "'";
NetList.Clear();
NetList = pni.SelectAll();
Win32_PerfRawData_Tcpip_NetworkInterface item = NetList[0] as Win32_PerfRawData_Tcpip_NetworkInterface;

float CounterValue1 = (float)item.BytesReceivedPersec;
float upv1 = (float)item.BytesSentPersec;
float TimeValue1 = (float)item.Timestamp_PerfTime;
float TimeBase = (float)item.Frequency_PerfTime;
System.Threading.Thread.Sleep(500);

NetList.Clear();
NetList = pni.SelectAll();
item = NetList[0] as Win32_PerfRawData_Tcpip_NetworkInterface;

float CounterValue2 = (float)item.BytesReceivedPersec;
float upv2 = (float)item.BytesSentPersec;

float TimeValue2 = (float)item.Timestamp_PerfTime;

if (TimeValue2 - TimeValue1 == 0)
{ }
else
{
float downs = (CounterValue2 - CounterValue1) / ((TimeValue2 - TimeValue1) / TimeBase) / 1024;
float up = (upv2 - upv1) / ((TimeValue2 - TimeValue1) / TimeBase) / 1024;
UpdataValue(downs);
UpdataValue2(up);


}

 

这个程序中使用到一个EasyWMI的dll,这个dll中包括了所有WMI的定义。这个可以到codeProject 搜索一下 下载。

WMI的功能很强大,几乎所有的计算机上的信息都可以通过这个查到。很方便开发一些性能监控等程式。以后有时间准备写一个使用WMI实现计算机监控管理的程序来。

不过最近一直忙着用vc写的一个带UI的exe 的Com的程序。最近一段时间应该是没有什么时间了。

 

很晚了, 睡觉啦




对应的控件 :http://www.codeproject.com/Articles/17564/Simple-Performance-Chart