IOS源码开发获取当前的流量信息
2013-08-28 14:52
330 查看
通过读取系统网络接口信息,获取当前iphone设备的流量相关信息,统计的是上次开机至今的流量信息. 2
倒入库:
[html] view
plaincopy
SystemConfiguration.framework
加入头文件:
[html] view
plaincopy
#include <ifaddrs.h>
#include <sys/socket.h>
#include <net/if.h>
流量统计功能
[html] view
plaincopy
-(NSString *)bytesToAvaiUnit:(int)bytes
{
if(bytes < 1024) // B
{
return [NSString stringWithFormat:@"%dB", bytes];
}
else if(bytes >= 1024 && bytes < 1024 * 1024) // KB
{
return [NSString stringWithFormat:@"%.1fKB", (double)bytes / 1024];
}
else if(bytes >= 1024 * 1024 && bytes < 1024 * 1024 * 1024) // MB
{
return [NSString stringWithFormat:@"%.2fMB", (double)bytes / (1024 * 1024)];
}
else // GB
{
return [NSString stringWithFormat:@"%.3fGB", (double)bytes / (1024 * 1024 * 1024)];
}
}
-(void)checkNetworkflow{
struct ifaddrs *ifa_list = 0, *ifa;
if (getifaddrs(&ifa_list) == -1)
{
return;
}
uint32_t iBytes = 0;
uint32_t oBytes = 0;
uint32_t allFlow = 0;
uint32_t wifiIBytes = 0;
uint32_t wifiOBytes = 0;
uint32_t wifiFlow = 0;
uint32_t wwanIBytes = 0;
uint32_t wwanOBytes = 0;
uint32_t wwanFlow = 0;
struct timeval time ;
for (ifa = ifa_list; ifa; ifa = ifa->ifa_next)
{
if (AF_LINK != ifa->ifa_addr->sa_family)
continue;
if (!(ifa->ifa_flags & IFF_UP) && !(ifa->ifa_flags & IFF_RUNNING))
continue;
if (ifa->ifa_data == 0)
continue;
// Not a loopback device.
// network flow
if (strncmp(ifa->ifa_name, "lo", 2))
{
struct if_data *if_data = (struct if_data *)ifa->ifa_data;
iBytes += if_data->ifi_ibytes;
oBytes += if_data->ifi_obytes;
allFlow = iBytes + oBytes;
time = if_data->ifi_lastchange;
// NSLog(@"1111===%s :iBytes is %d, oBytes is %d", ifa->ifa_name, iBytes, oBytes);
}
//<span style="font-family: Tahoma, Helvetica, Arial, 宋体, sans-serif; ">WIFI流量统计功能</span>
if (!strcmp(ifa->ifa_name, "en0"))
{
struct if_data *if_data = (struct if_data *)ifa->ifa_data;
wifiIBytes += if_data->ifi_ibytes;
wifiOBytes += if_data->ifi_obytes;
wifiFlow = wifiIBytes + wifiOBytes;
}
//<span style="font-family: Tahoma, Helvetica, Arial, 宋体, sans-serif; ">3G和GPRS流量统计</span>
if (!strcmp(ifa->ifa_name, "pdp_ip0"))
{
struct if_data *if_data = (struct if_data *)ifa->ifa_data;
wwanIBytes += if_data->ifi_ibytes;
wwanOBytes += if_data->ifi_obytes;
wwanFlow = wwanIBytes + wwanOBytes;
//NSLog(@"111122===%s :iBytes is %d, oBytes is %d", ifa->ifa_name, iBytes, oBytes);
}
}
freeifaddrs(ifa_list);
NSString *changeTime=[NSString stringWithFormat:@"%s",ctime(&time)];
NSLog(@"changeTime==%@",changeTime);
NSString *receivedBytes= [self bytesToAvaiUnit:iBytes];
NSLog(@"receivedBytes==%@",receivedBytes);
NSString *sentBytes = [self bytesToAvaiUnit:oBytes];
NSLog(@"sentBytes==%@",sentBytes);
NSString *networkFlow = [self bytesToAvaiUnit:allFlow];
NSLog(@"networkFlow==%@",networkFlow);
NSString *wifiReceived = [self bytesToAvaiUnit:wifiIBytes];
NSLog(@"wifiReceived==%@",wifiReceived);
NSString *wifiSent = [self bytesToAvaiUnit: wifiOBytes];
NSLog(@"wifiSent==%@",wifiSent);
NSString *wifiBytes = [self bytesToAvaiUnit:wifiFlow];
NSLog(@"wifiBytes==%@",wifiBytes);
NSString *wwanReceived = [self bytesToAvaiUnit:wwanIBytes];
NSLog(@"wwanReceived==%@",wwanReceived);
NSString *wwanSent = [self bytesToAvaiUnit:wwanOBytes];
NSLog(@"wwanSent==%@",wwanSent);
NSString *wwanBytes = [self bytesToAvaiUnit:wwanFlow];
NSLog(@"wwanBytes==%@",wwanBytes);
}
主要方法就是上面的,然后在你想要知道的结果的地方调用就ok了。
[html] view
plaincopy
[self checkNetworkflow];
结果:
[html] view
plaincopy
2013-03-30 23:45:33.565 Reachability[2993:707] changeTime==Sat Mar 30 09:52:09 2013
2013-03-30 23:45:33.567 Reachability[2993:707] receivedBytes==62.73MB
2013-03-30 23:45:33.569 Reachability[2993:707] sentBytes==8.22MB
2013-03-30 23:45:33.571 Reachability[2993:707] networkFlow==70.94MB
2013-03-30 23:45:33.573 Reachability[2993:707] wifiReceived==55.40MB
2013-03-30 23:45:33.575 Reachability[2993:707] wifiSent==5.41MB
2013-03-30 23:45:33.577 Reachability[2993:707] wifiBytes==60.81MB
2013-03-30 23:45:33.579 Reachability[2993:707] wwanReceived==7.33MB
2013-03-30 23:45:33.581 Reachability[2993:707] wwanSent==2.81MB
2013-03-30 23:45:33.583 Reachability[2993:707] wwanBytes==10.14MB
当然你也可以只统计3G/GPRS流量统计 或者 WIFI流量统计。
转自:http://blog.csdn.net/justinjing0612/article/details/8741554
倒入库:
[html] view
plaincopy
SystemConfiguration.framework
加入头文件:
[html] view
plaincopy
#include <ifaddrs.h>
#include <sys/socket.h>
#include <net/if.h>
流量统计功能
[html] view
plaincopy
-(NSString *)bytesToAvaiUnit:(int)bytes
{
if(bytes < 1024) // B
{
return [NSString stringWithFormat:@"%dB", bytes];
}
else if(bytes >= 1024 && bytes < 1024 * 1024) // KB
{
return [NSString stringWithFormat:@"%.1fKB", (double)bytes / 1024];
}
else if(bytes >= 1024 * 1024 && bytes < 1024 * 1024 * 1024) // MB
{
return [NSString stringWithFormat:@"%.2fMB", (double)bytes / (1024 * 1024)];
}
else // GB
{
return [NSString stringWithFormat:@"%.3fGB", (double)bytes / (1024 * 1024 * 1024)];
}
}
-(void)checkNetworkflow{
struct ifaddrs *ifa_list = 0, *ifa;
if (getifaddrs(&ifa_list) == -1)
{
return;
}
uint32_t iBytes = 0;
uint32_t oBytes = 0;
uint32_t allFlow = 0;
uint32_t wifiIBytes = 0;
uint32_t wifiOBytes = 0;
uint32_t wifiFlow = 0;
uint32_t wwanIBytes = 0;
uint32_t wwanOBytes = 0;
uint32_t wwanFlow = 0;
struct timeval time ;
for (ifa = ifa_list; ifa; ifa = ifa->ifa_next)
{
if (AF_LINK != ifa->ifa_addr->sa_family)
continue;
if (!(ifa->ifa_flags & IFF_UP) && !(ifa->ifa_flags & IFF_RUNNING))
continue;
if (ifa->ifa_data == 0)
continue;
// Not a loopback device.
// network flow
if (strncmp(ifa->ifa_name, "lo", 2))
{
struct if_data *if_data = (struct if_data *)ifa->ifa_data;
iBytes += if_data->ifi_ibytes;
oBytes += if_data->ifi_obytes;
allFlow = iBytes + oBytes;
time = if_data->ifi_lastchange;
// NSLog(@"1111===%s :iBytes is %d, oBytes is %d", ifa->ifa_name, iBytes, oBytes);
}
//<span style="font-family: Tahoma, Helvetica, Arial, 宋体, sans-serif; ">WIFI流量统计功能</span>
if (!strcmp(ifa->ifa_name, "en0"))
{
struct if_data *if_data = (struct if_data *)ifa->ifa_data;
wifiIBytes += if_data->ifi_ibytes;
wifiOBytes += if_data->ifi_obytes;
wifiFlow = wifiIBytes + wifiOBytes;
}
//<span style="font-family: Tahoma, Helvetica, Arial, 宋体, sans-serif; ">3G和GPRS流量统计</span>
if (!strcmp(ifa->ifa_name, "pdp_ip0"))
{
struct if_data *if_data = (struct if_data *)ifa->ifa_data;
wwanIBytes += if_data->ifi_ibytes;
wwanOBytes += if_data->ifi_obytes;
wwanFlow = wwanIBytes + wwanOBytes;
//NSLog(@"111122===%s :iBytes is %d, oBytes is %d", ifa->ifa_name, iBytes, oBytes);
}
}
freeifaddrs(ifa_list);
NSString *changeTime=[NSString stringWithFormat:@"%s",ctime(&time)];
NSLog(@"changeTime==%@",changeTime);
NSString *receivedBytes= [self bytesToAvaiUnit:iBytes];
NSLog(@"receivedBytes==%@",receivedBytes);
NSString *sentBytes = [self bytesToAvaiUnit:oBytes];
NSLog(@"sentBytes==%@",sentBytes);
NSString *networkFlow = [self bytesToAvaiUnit:allFlow];
NSLog(@"networkFlow==%@",networkFlow);
NSString *wifiReceived = [self bytesToAvaiUnit:wifiIBytes];
NSLog(@"wifiReceived==%@",wifiReceived);
NSString *wifiSent = [self bytesToAvaiUnit: wifiOBytes];
NSLog(@"wifiSent==%@",wifiSent);
NSString *wifiBytes = [self bytesToAvaiUnit:wifiFlow];
NSLog(@"wifiBytes==%@",wifiBytes);
NSString *wwanReceived = [self bytesToAvaiUnit:wwanIBytes];
NSLog(@"wwanReceived==%@",wwanReceived);
NSString *wwanSent = [self bytesToAvaiUnit:wwanOBytes];
NSLog(@"wwanSent==%@",wwanSent);
NSString *wwanBytes = [self bytesToAvaiUnit:wwanFlow];
NSLog(@"wwanBytes==%@",wwanBytes);
}
主要方法就是上面的,然后在你想要知道的结果的地方调用就ok了。
[html] view
plaincopy
[self checkNetworkflow];
结果:
[html] view
plaincopy
2013-03-30 23:45:33.565 Reachability[2993:707] changeTime==Sat Mar 30 09:52:09 2013
2013-03-30 23:45:33.567 Reachability[2993:707] receivedBytes==62.73MB
2013-03-30 23:45:33.569 Reachability[2993:707] sentBytes==8.22MB
2013-03-30 23:45:33.571 Reachability[2993:707] networkFlow==70.94MB
2013-03-30 23:45:33.573 Reachability[2993:707] wifiReceived==55.40MB
2013-03-30 23:45:33.575 Reachability[2993:707] wifiSent==5.41MB
2013-03-30 23:45:33.577 Reachability[2993:707] wifiBytes==60.81MB
2013-03-30 23:45:33.579 Reachability[2993:707] wwanReceived==7.33MB
2013-03-30 23:45:33.581 Reachability[2993:707] wwanSent==2.81MB
2013-03-30 23:45:33.583 Reachability[2993:707] wwanBytes==10.14MB
当然你也可以只统计3G/GPRS流量统计 或者 WIFI流量统计。
转自:http://blog.csdn.net/justinjing0612/article/details/8741554
相关文章推荐
- IOS源码开发获取当前的流量信息
- IOS源码开发获取当前的流量信息
- IOS源码开发获取当前的流量信息
- iOS开发小技巧 获取当前设备/应用程序相关信息
- ios开发之 -- 调用系统定位获取当前经纬度与地理信息
- iOS开发笔记(使用Google Map Service获取用户当前位置信息)
- iOS项目开发实战——使用CoreLocation获取当前位置信息
- ios开发——获取当前设备信息
- ios开发之 -- 调用系统定位获取当前经纬度与地理信息
- iOS项目开发实战——使用CoreLocation获取当前位置信息
- iOS开发 - 获取当前网络状态
- 微信会员注册开发【带源码】:网页授权,得到code后在当前页面获取openid,js+php实现跨域请求
- iOS开发-Object-C获取手机设备信息(UIDevice)
- XMPPFrameWork IOS 开发(五)获取好友信息和添加删除好友
- windows应用开发由浅入深(五)关于进程和线程--获取当前进程信息
- ios开发 CLLocationManager获取位置信息时遇到的一个小问题
- ios项目开发(天气预报项目):使用正则获取 weather.com.cn网站信息
- iOS开发----地图与导航--定位和位置信息获取
- iOS获取当前设备型号等信息(全)包含iPhone7和iPhone7P
- iOS获取当前位置信息