本人是北京邮电大学的研究生,正在学习MFC,前几天在网上看到了《VC++设计图形显示CPU内存利用率程序 》。
http://www.yesky.com/212/1870212.shtml
于是自己仿照他的方法,编了VC++设计图形显示网络流量程序。
其实网络监控,或者网络流量的MFC基本编程比较简单。就是熟悉几个结构体,和几个函数。包括GetIfTable函数,MIB_IFTABLE和MIB_IFROW这两个结构体,可以google一下,或者msdn查一下手册,比较简单。
我这有个例子,就是我的程序中的GetNetUsges这个函数,获得网络的网卡类型(是10M或者100M),及时的发送数据个数,接受数据个数。
//
//netspeed函数获得本机网卡的接受,发送数据量,和网口是什么类型的,
//
//
int CNetUsgesCtl::GetNetUsges(DWORD &speed,DWORD &sendtotal ,DWORD &retotal)
{
MIB_IFTABLE * pIfTable = NULL; //网络信息表
ULONG dwSize = 0; //接口个数
DWORD dwRet; //返回值
dwRet = GetIfTable( pIfTable, &dwSize, TRUE ); //dwsize获得接口个数
if ( dwRet == ERROR_INSUFFICIENT_BUFFER )
{
pIfTable = ( MIB_IFTABLE * ) new char[dwSize];
if ( pIfTable != NULL )
{
dwRet = GetIfTable( pIfTable, &dwSize, TRUE ); //获得真实接口信息
if ( dwRet == NO_ERROR )
{
TRACE( "dwNumEntries = %u/n", pIfTable->dwNumEntries );
for ( int i=0; i<pIfTable->dwNumEntries; i++ )
{
if((pIfTable->table[i]).dwType ==6
&& (pIfTable->table[i]).dwInOctets>0 && (pIfTable->table[i]).dwOutOctets>0 ){
//只保留dwtype为6是网卡信息,接受发送了数据。默认服务器只能用一个网卡,
TRACE( "table[%1d].dwIndex = %u/n", i, (pIfTable->table[i]).dwIndex );
TRACE( " dwType = %u/n", (pIfTable->table[i]).dwType );
TRACE( " dwSpeed = %u/n", (pIfTable->table[i]).dwSpeed );
//added (pIfTable->table[i]).dwInOctets=0;
TRACE("/t received data is %u/n",(pIfTable->table[i]).dwInOctets); //接口接受总数据
TRACE("/t send data is %u/n",(pIfTable->table[i]).dwOutOctets); // 接口发送总数据
speed=(pIfTable->table[i]).dwSpeed; //获得网卡数据类型,10M or100M
retotal=(pIfTable->table[i]).dwInOctets; //网卡接受到的总的数据字节
sendtotal=(pIfTable->table[i]).dwOutOctets; //网卡发送的
}
}
}
else {
TRACE( "Some error occured in netspeed!/n" );
}
}
else {
TRACE( "Memory allocate failue/n" );
}
}
else {
TRACE( "Some error occured in netspeed!/n" );
}
// m_ulNewUsges= ;DWORD &speed,DWORD &sendtotal ,DWORD &retotal
double speed1=speed;
double usgedreceive=(retotal-m_recedata)/(1000);
double usgedsend=(sendtotal-m_senddata)/(1000);
return 0;
}
这个程序的全部代码我已经传到了CSDN上了,可以搜索资源 《自己用mschart做的网络流量监控MFC程序》