(windows mobile) PDA/PPC下如何获取GPRS的网络流量
2009-08-13 23:21
357 查看
Description:
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[i];
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总的流量,当然也可以分开统计。
http://04100109.blog.163.com/blog/static/69419881200961795038637/
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[i];
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总的流量,当然也可以分开统计。
http://04100109.blog.163.com/blog/static/69419881200961795038637/
相关文章推荐
- PDA/PPC下如何获取GPRS的网络流量
- 【转】PDA/PPC下如何获取GPRS的网络流量
- 获取的是开机后WIFI,3G/GPRS网络下使用流量
- PPC Windows Mobile判断网络(gprs)连接与否代码
- PPC Windows Mobile判断网络(gprs)连接与否代码
- 如何使用PHP获取网络上的文件
- 我给女朋友讲编程网络系列(4)—颜色值及如何获取颜色值和下载软件小技巧
- Windows Mobile中GPRS连接网络
- 【Firewall系列一】浅析基于区域的防火墙方案如何监测网络环境中内外流量与程序会话
- Fedora Linux如何设置网卡自动获取网络地址
- iOS 10下的In-Apps视频广告,如何更好获取优质流量
- Android如何获取网络上的图片并且显示在ImageView上
- Windows Mobile如何判断GPRS的接入点
- iOS-网络-如何获取文件的MINEType
- python如何查看系统网络流量的信息
- 如何获取Android手机连接当前网络的外网IP
- 如何在Linux下统计高速网络中的流量
- Android 如何获取网络上的图片
- 如何用线程Asynctask获取网络数据
- 如何获取网络资源?