您的位置:首页 > 移动开发 > IOS开发

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: