/我们可以使用Iphlpapi函数来制作自己的Ipconfig程序、Arp程序或者别的程序。
在第二章第二节介绍了GetIfTable函数,通过这个函数可以获得总共收到和发出的数据字节数等信息。比较前后两次总共收到与发出的数据大小以及之间的时间,就可以获得当前网络传输数据的速率。
#include <windows.h>
#include <iphlpapi.h>#include <stdio.h>
#pragma comment ( lib, "iphlpapi.lib" )
int main(void)
{
MIB_IFTABLE *pIfTable = NULL;
ULONG dwSize = 0;
DWORD dwRet;
printf("This program try to get the speed of a modem by using GetIfTable()\n");
dwRet = GetIfTable(pIfTable, &dwSize, TRUE);
if (dwRet == ERROR_INSUFFICIENT_BUFFER)
{
pIfTable = (MIB_IFTABLE *) new char[dwSize];
if (pIfTable != NULL)
{
dwRet = GetIfTable(pIfTable, &dwSize, TRUE);
if (dwRet == NO_ERROR)
{
printf("dwNumEntries = %u\n", pIfTable->dwNumEntries);
for (int i = 0; i<pIfTable->dwNumEntries; i++)
{
if ((pIfTable->table[i]).dwType == MIB_IF_TYPE_ETHERNET && (pIfTable->table[i]).dwAdminStatus == 1 && ((pIfTable->table[i]).dwPhysAddrLen == 6) && ((pIfTable->table[i].dwOperStatus) == MIB_IF_OPER_STATUS_OPERATIONAL))//MIB_IF_TYPE_ETHERNET ->以太网
{
printf("table[%1d].dwIndex = %u\n",i,(pIfTable->table[i]).dwIndex);
printf(" dwType = %u\n",(pIfTable->table[i]).dwType);
printf(" dwSpeed = %u\n",(pIfTable->table[i]).dwSpeed);
}
}
}
else
{
printf("Some error occured!\n");
}
}
else
{
printf("Memory allocate failue\n");
}
}
else
{
printf("Some error occured!\n");
}
system("pause");
return 0;
}
GetIfTable 统计流量怎么不准,哪里出错了?
int inCount = 0;
int outCount = 0;
if ((dwRetVal = GetIfTable(pIfTable, &dwSize, FALSE)) == NO_ERROR)
{
for (int i = 0; i < pIfTable->dwNumEntries; i++)
{
pIfRow = (MIB_IFROW *)& pIfTable->table[i];
if ((pIfRow->dwPhysAddrLen == 6) && (pIfRow->dwType == MIB_IF_TYPE_ETHERNET))
{
inCount += pIfRow->dwInOctets;
outCount += pIfRow->dwOutOctets;
}
}
}
if (m_inCount == -1)
{
m_inCount = inCount;
m_outCount = outCount;
}
else
{
int intmp = inCount - m_inCount;
int outtmp = outCount - m_outCount;
m_inCount = inCount;
m_outCount = outCount;
printf(("in:%d kb//s out:%d kb//s\n"), intmp / 1024, outtmp / 1024);
}
每1秒会调用这个函数一次,统计出来的和360的差很多。
我进行上传和下载,明显统计的数据就是大很多。
------解决思路----------------------
对比一下数据,再分析是数据获取 不对还是计算有问题