流量统计 (转)

网上的一篇关于IP Helper的文章,虽然不懂,但还是转载过来,做个标记

PDA/PPC设备上,GPRS上网的途径有两种:通过Modem拨号和通过WI-FI无线上网,前者一般用在PDA/PPC和电脑间的,使用数据线、红外线、蓝牙等连接途径与电脑相连,拨号上网;
通过WI-FI无线上网则是手机直接上网。在PDA/PPC下,网络流量的统计和其他WINDOWS平台并没有太大区别,最简单的方法就是通过微软的IPHELPER API,其他的方法有通过NDISUIO
用CreateFile打开"UIO0:",,DeviceIoControl实现对网卡的枚举,绑定等工作或是用SPI等应用层(使用SPI在Windows CE/Mobile上实现网络防火墙的例子代码)。
int GetTraffic(void)
{

DWORD dwSize = 0;
DWORD dwRetVal = 0;

int i = 0;
int j = 0;


MIB_IFTABLE *pIfTable;
MIB_IFROW *pIfRow;

// Allocate memory for our pointers.
pIfTable = (MIB_IFTABLE *) MALLOC(sizeof (MIB_IFTABLE));
if (pIfTable == NULL)
{
  return 0;
}
// Make an initial call to GetIfTable to get the
// necessary size into dwSize
dwSize = sizeof (MIB_IFTABLE);
if (GetIfTable(pIfTable, &dwSize, FALSE) == ERROR_INSUFFICIENT_BUFFER)
{
  FREE(pIfTable);
  pIfTable = (MIB_IFTABLE *) MALLOC(dwSize);
  if (pIfTable == NULL)
  {
   return 0;
  }
}

// Make a second call to GetIfTable to get the actual
// data we want.
if ((dwRetVal = GetIfTable(pIfTable, &dwSize, FALSE)) == NO_ERROR)
{
  for (i = 0; i < (int) pIfTable->dwNumEntries; i++)
  {
   pIfRow = (MIB_IFROW *) & pIfTable->table;

   if ((pIfRow->dwType == IF_TYPE_ETHERNET_CSMACD) || (pIfRow->dwType == IF_TYPE_PPP))//以太网
   {
    m_lConnection = TRUE;
    //
    if (strstr(Descr,"cmwap") || strstr(Descr,"cmnet"))//接入点是cmwap
    {
     {
      sprintf(m_sNowTraffic,"%1.2f",pIfRow->dwInOctets / 1024.0);//现在的流量
      m_bReturn = TRUE;
     }
    }
    if (pIfTable != NULL)
    {
     FREE(pIfTable);
     pIfTable = NULL;
    }

   }
  }
}
else
{
  if (pIfTable != NULL)
  {
   FREE(pIfTable);
   pIfTable = NULL;
  }
  return 0;
  // Here you can use FormatMessage to find out why
  // it failed.
}
if (pIfTable != NULL)
{
  FREE(pIfTable);
  pIfTable = NULL;
}
}
要注意的是pIfRow->dwInOctets获得是当前的流量,也是本次连接的总流量,不用累加的;当从其他非GPRS连接转过来时,流量要加上上次流量才是总流量;这里统计的是通过WI-FI和MODEM方式的GPRS总的流量,当然也可以分开统计。

请大家注意,代码红色的部分有问题。在For循环里,会出现访问空指针的情况。
转载于http://blog.sina.com.cn/s/blog_4 ... el=rela_nextarticle

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值