VC获取网卡流量

BOOL CTSysWatch::GetNetAdapterFlux(LPNETADAPTER_FLUX pAdapterFlux, int nIndex )

{

// Declare and initialize variables

DWORD dwRetVal = 0;

 

// Make an initial call to GetIfTable to get the

// necessary size into the dwSize variable

if(m_ifTable == NULL)

{

if (GetIfTable(m_ifTable, &m_dwTableSize, 0) == ERROR_INSUFFICIENT_BUFFER) 

{

m_ifTable = (MIB_IFTABLE *) malloc (m_dwTableSize);

}

}

 

// Make a second call to GetIfTable to get the 

// actual data we want

if ((dwRetVal = GetIfTable(m_ifTable, &m_dwTableSize, 0)) != NO_ERROR) 

{

return FALSE;

}

 

int nPos = 0;

for(int i = 0; i < (int)m_ifTable->dwNumEntries; i++)

{

if(m_ifTable->table[i].dwIndex == (DWORD)nIndex)

{

nPos = i;

break;

}

}

if(nPos == (int)m_ifTable->dwNumEntries)

return FALSE;

 

if(m_parrAdapterTable == NULL)

{

m_parrAdapterTable = new ADAPTER_TABLE[m_ifTable->dwNumEntries];

memset(m_parrAdapterTable,0,m_ifTable->dwNumEntries * sizeof(ADAPTER_TABLE));

m_parrAdapterTable[nPos].dwOldInOctets = m_ifTable->table[nPos].dwInOctets;

m_parrAdapterTable[nPos].dwOldOutOctets = m_ifTable->table[nPos].dwOutOctets;

return TRUE;

}

 

//in

pAdapterFlux->fInCurrentFlux = (float)((m_ifTable->table[nPos].dwInOctets - m_parrAdapterTable[nPos].dwOldInOctets) * 8.0/1000.0);

m_parrAdapterTable[nPos].dwOldInOctets = m_ifTable->table[nPos].dwInOctets;

 

if(pAdapterFlux->fInCurrentFlux > m_parrAdapterTable[nPos].fInMaxFlux) 

m_parrAdapterTable[nPos].fInMaxFlux = pAdapterFlux->fInCurrentFlux;

pAdapterFlux->fInMaxFlux = m_parrAdapterTable[nPos].fInMaxFlux;

 

m_parrAdapterTable[nPos].fInAverageFlux = (float)(m_parrAdapterTable[nPos].fInAverageFlux + (pAdapterFlux->fInCurrentFlux - m_parrAdapterTable[nPos].fInAverageFlux) / (m_parrAdapterTable[nPos].dwTimes + 1.0));

pAdapterFlux->fInAverageFlux = m_parrAdapterTable[nPos].fInAverageFlux;

 

//out

pAdapterFlux->fOutCurrentFlux = (float)((m_ifTable->table[nPos].dwOutOctets - m_parrAdapterTable[nPos].dwOldOutOctets) * 8.0/1000.0);

m_parrAdapterTable[nPos].dwOldOutOctets = m_ifTable->table[nPos].dwOutOctets;

 

if(pAdapterFlux->fOutCurrentFlux > m_parrAdapterTable[nPos].fOutMaxFlux) 

m_parrAdapterTable[nPos].fOutMaxFlux = pAdapterFlux->fOutCurrentFlux;

pAdapterFlux->fOutMaxFlux = m_parrAdapterTable[nPos].fOutMaxFlux;

 

m_parrAdapterTable[nPos].fOutAverageFlux = (float)(m_parrAdapterTable[nPos].fOutAverageFlux + (pAdapterFlux->fOutCurrentFlux - m_parrAdapterTable[nPos].fOutAverageFlux) / (m_parrAdapterTable[nPos].dwTimes + 1.0));

pAdapterFlux->fOutAverageFlux = m_parrAdapterTable[nPos].fOutAverageFlux;

 

m_parrAdapterTable[nPos].dwTimes++;

return TRUE;

}

 

//return 0 success

//return 1 ERROR_INSUFFICIENT_BUFFER

//return -1 failed

BOOL CTSysWatch::GetNetAdapterInfo(LPNETINTERFACE_INFO pIfInfo,PDWORD pdwCount)

{

// Declare and initialize variables

DWORD dwRetVal = 0;

 

// Make an initial call to GetIfTable to get the

// necessary size into the dwSize variable

if(m_ifTable == NULL)

{

if (GetIfTable(m_ifTable, &m_dwTableSize, 0) == ERROR_INSUFFICIENT_BUFFER) 

{

m_ifTable = (MIB_IFTABLE *) malloc (m_dwTableSize);

}

}

 

// Make a second call to GetIfTable to get the 

// actual data we want

if ((dwRetVal = GetIfTable(m_ifTable, &m_dwTableSize, 0)) != NO_ERROR) 

{

return -1;

}

 

if(*pdwCount < m_ifTable->dwNumEntries)

{

*pdwCount = m_ifTable->dwNumEntries;

return 1;

}

 

for(int i = 0; i < (int)m_ifTable->dwNumEntries; i++)

{

pIfInfo[i].dwIndex = m_ifTable->table[i].dwIndex;

pIfInfo[i].dwType = m_ifTable->table[i].dwType;

memcpy(pIfInfo[i].bDescr,m_ifTable->table[i].bDescr,MAXLEN_IFDESCR);

}

return 0;

}

 


调用:
char szTmp[25] = {0};
NETADAPTER_FLUX AdapterFlux = {0};

GetNetAdapterFlux(&AdapterFlux);
memset(szTmp,0x00,25);
sprintf(szTmp,"%.2fk/%.2fk",AdapterFlux.fInCurrentFlux,AdapterFlux.fOutCurrentFlux);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值