iOS获取流量参考
通过读取系统网络接口信息,获取当前iphone设备的流量相关信息,统计的是上次开机至今的流量信息. 2
倒入库:
- SystemConfiguration.framework
加入头文件:
- #include <ifaddrs.h>
- #include <sys/socket.h>
- #include <net/if.h>
流量统计功能
- -(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了。
- [self checkNetworkflow];
结果:
- 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流量统计。
iOS获取流量参考的更多相关文章
- iOS 获取流量
#include <arpa/inet.h> #include <net/if.h> #include <ifaddrs.h> #include <net/i ...
- iOS获取设备型号、装置类型等信息
iOS获取设备型号.设备类型等信息 设备标识 关于设备标识,历史上盛行过很多英雄,比如UDID.Mac地址.OpenUDID等,然而他们都陆陆续续倒在了苹果的门下.苹果目前提供了2个方法供App获取设 ...
- iOS获取UUID
转自:<iOS获取设备的唯一标识的方法总结以及最好的方法> 参考:<获取iOS设备唯一标识> 总结一下: 1.代码采用CFUUID+KeyChain的实现方式. 2.CFUUI ...
- iOS手机流量抓包rvictl
移动设备抓包主要方式 一.PC上设置网络共享,生成Wi-Fi热点供移动设备使用,PC上再使用tcpdump.Wireshark等捕获分析: 二.PC上开启http代理工具服务器(如Charles.fi ...
- iOS编码规范参考
目录 注释 1.1 多行注释 1.2 单行注释 1.3 函数的注释 命名 2.1 常量的命名 2.2 函数的命名 2.3 变量的命名 2.3.1 成员变量 2.3.2 公 ...
- iOS 网络流量统计
在开发中,有时候需要获取流量统计信息.研究发现:通过函数getifaddrs来得到系统网络接口的信息,网络接口的信息,包含在if_data字段中, 有很多信息, 但我现在只关心ifi_ibytes, ...
- iOS获取设备唯一标识的8种方法
8种iOS获取设备唯一标识的方法,希望对大家有用. UDID UDID(Unique Device Identifier),iOS 设备的唯一识别码,是一个40位十六进制序列(越狱的设备通过某些工具可 ...
- iOS 获取文件的目录路径的几种方法 [转]
iOS 获取文件的目录路径的几种方法 2 years ago davidzhang iphone沙箱模型的有四个文件夹,分别是什么,永久数据存储一般放在什么位置,得到模拟器的路径的简单方式是什么. d ...
- Swift3.0 iOS获取当前时间 - 年月日时分秒星期
Swift3.0 iOS获取当前时间 - 年月日时分秒星期func getTimes() -> [Int] { var timers: [Int] = [] // 返回的数组 let calen ...
随机推荐
- OC中的指针
NSError *err = nil; NSError __strong **error = &err; //因为在oc中,通过* *err 创建的指针是用__strong修改的,所以要一致, ...
- HTML 学习笔记(链接)
HTML链接 超链接可以是一个字,一个词,或者一组词,也可以是一幅图像,您可以点击这些内容来跳转到新的文档或者当前文档中的某个部分. 当您把鼠标指针移动到网页中的某个链接上时,箭头会变为一只小手. 我 ...
- .NET Framework 中的所有类型
.NET Framework 中的所有类型不是值类型就是引用类型. 值类型是使用对象实际值来表示对象的数据类型. 如果向一个变量分配值类型的实例,则该变量将被赋以该值的全新副本. 引用类型是使用对对象 ...
- notes:spm多重比较校正
SPM做完统计后,statistical table中的FDRc实际上是在该p-uncorrected下,可以令FDR-correcred p<=0.05的最小cluster中的voxel数目: ...
- usb驱动开发21之驱动生命线
现在开始就沿着usb_generic_driver的生命线继续往下走.设备的生命线你可以为是从你的usb设备连接到hub的某个端口时开始,而驱动的生命线就必须得回溯到usb子系统的初始化函数usb_i ...
- Could not load file or assembly 'System.Data.SQLite' or one of its dependencies
试图加载格式不正确的程 异常类型 异常消息Could not load file or assembly 'System.Data.SQLite' or one of its dependencies ...
- Linux 网络编程详解二(socket创建流程、多进程版)
netstat -na | grep " --查看TCP/IP协议连接状态 //socket编程提高版--服务器 #include <stdio.h> #include < ...
- jQuery使用.on()无法绑定hover
发现好像没有hover这个事件,jQuery的hover事件是一个封装,hover算不得一个事件.他只是将mouseover和mouseout合并了用mouseover和mouseout两个配合效果好 ...
- intellij idea 高级用法之:集成JIRA、UML类图插件、集成SSH、集成FTP、Database管理
之前写过一篇IntelliJ IDEA 13试用手记,idea还有很多高大上的功能,易用性几乎能与vs.net媲美,反正我自从改用idea后,再也没开过eclipse,今天来看几个高级功能: 一.与J ...
- [BZOJ1188][HNOI2007]分裂游戏(博弈论)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1188 分析: 设SG[i]表示一个石子在位置i上的SG值 这个很容易暴力求,因为i的后 ...