IOS实时监控上传下载速度
在开发中要获取网络类型是很简单的,导入Reachability直接获取状态就行了,现在我们要做一个类似下载器的那种实时把上传下载速度显示出来。
需要用到的头文件
要测速度所以必须要有一个定时器,咱们为了不耗用户的流量,取的是数据的总量,然后减去上一次的检测的总量,得出的就是速度。网络现在分为wifi以及wwan两种类型。
首先头文件.h建立一个检测的数据类
@interface MonitorData : NSObject @property (assign, nonatomic) float wwanSend; @property (assign, nonatomic) float wwanReceived; @property (assign, nonatomic) float wifiSend; @property (assign, nonatomic) float wifiReceived; @end
然后建立一个检测类
@interface MonitorFlow : NSObject //开始检测 - (void)startMonitor; //停止检测 - (void)stopMonitor; @end 实现文件.M //成员变量是内部可见的 @interface MonitorFlow () @property (strong,nonatomic) NSTimer *timer; @property (assign, nonatomic) float tempWWANReceived; @property (assign, nonatomic) float tempWWANSend; @property (assign, nonatomic) float tempWifiReceived; @property (assign, nonatomic) float tempWifiSend; @end 直接把代码附上,里面有注释 @implementation MonitorFlow - (void)startMonitor { [self currentFlow]; self.timer = [NSTimer timerWithTimeInterval:1.0 target:self selector:@selector(refreshFlow) userInfo:nil repeats:YES]; [[NSRunLoop currentRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes]; } - (void)stopMonitor{ [self.timer invalidate]; } - (void)refreshFlow{ // 上传、下载 //不需要连通网络获取的是总的数据 Reachability *reachability = [Reachability reachabilityWithHostName:@"Yes-Cui"]; MonitorData *monitor = [self getMonitorDataDetail]; switch (reachability.currentReachabilityStatus) { case ReachableViaWiFi: { float wifiSend = monitor.wifiSend - self.tempWifiSend; float wifiReceived = monitor.wifiReceived - self.tempWifiReceived; NSLog(@"wifi上传速度:%@",[NSString stringWithFormat:@"%.0f KB/s",wifiSend]); NSLog(@"wifi下载速度:%@",[NSString stringWithFormat:@"%.0f KB/s",wifiReceived]); } break; case ReachableViaWWAN: { float wwanSend = monitor.wwanSend - self.tempWWANReceived; float wwanReceived = monitor.wifiReceived - self.tempWWANSend; NSLog(@"wwan上传速度:%@",[NSString stringWithFormat:@"%.0f KB/s",wwanSend]); NSLog(@"wwan下载速度:%@",[NSString stringWithFormat:@"%.0f KB/s",wwanReceived]); } break; default: { NSLog(@"无网络"); } break; } [self currentFlow]; } //赋值当前流量 - (void)currentFlow{ MonitorData *monitor = [self getMonitorDataDetail]; self.tempWifiSend = monitor.wifiSend; self.tempWifiReceived = monitor.wifiReceived; self.tempWWANSend = monitor.wwanSend; self.tempWWANReceived = monitor.wwanReceived; } //上传、下载总额流量 - (MonitorData *)getMonitorDataDetail { BOOL success; struct ifaddrs *addrs; struct ifaddrs *cursor; struct if_data *networkStatisc; long tempWiFiSend = ; long tempWiFiReceived = ; long tempWWANSend = ; long tempWWANReceived = ; NSString *dataName; success = getifaddrs(&addrs) == ; if (success) { cursor = addrs; while (cursor != NULL) { dataName = [NSString stringWithFormat:@"%s",cursor->ifa_name]; if (cursor->ifa_addr->sa_family == AF_LINK) { if ([dataName hasPrefix:@"en"]) { networkStatisc = (struct if_data *) cursor->ifa_data; tempWiFiSend += networkStatisc->ifi_obytes; tempWiFiReceived += networkStatisc->ifi_ibytes; } if ([dataName hasPrefix:@"pdp_ip"]) { networkStatisc = (struct if_data *) cursor->ifa_data; tempWWANSend += networkStatisc->ifi_obytes; tempWWANReceived += networkStatisc->ifi_ibytes; } } cursor = cursor->ifa_next; } freeifaddrs(addrs); } MonitorData *monitorData = [MonitorData new]; monitorData.wifiSend = tempWiFiSend/; monitorData.wifiReceived = tempWiFiReceived/; monitorData.wwanSend = tempWWANSend/; monitorData.wwanReceived = tempWWANReceived/; return monitorData; } @end
來源:https://www.jianshu.com/p/42ab08c998ae
IOS实时监控上传下载速度的更多相关文章
- [Swift通天遁地]四、网络和线程-(9)上传图片并实时显示上传进度
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...
- 【iOS 使用github上传代码】详解
[iOS 使用github上传代码]详解 一.github创建新工程 二.直接添加文件 三.通过https 和 SSH 操作两种方式上传工程 3.1https 和 SSH 的区别: 3.1.1.前者可 ...
- iOS上架ipa上传问题那些事
iOS上架ipa上传问题那些事 原文: http://www.jianshu.com/p/1e22543285c2 字数513 阅读312 评论0 喜欢1 通过xcode直接打包上传,不会提示你的ip ...
- 使用IPTABLES限制IP上传下载速度,如何用iptables限速?
怎样使用IPTABLES限制IP上传下载速度,如何用iptables限速?我们先来看范例: iptables限制某IP的上传速度为1000KB/秒(8Mbps,流入服务器带宽),即在此IP所在的服务器 ...
- iOS多图上传
iOS多图上传涉及到多线程问题,个人比较喜欢使用GCD操作,下边是最近写的一个多图上传代码,附带相关注释 __block BOOL allSucc = YES; __block int m = 0; ...
- iOS自动化打包上传的踩坑记
http://www.cocoachina.com/ios/20160624/16811.html 很久以前就看了很多关于iOS自动打包ipa的文章, 看着感觉很简单, 但是因为一直没有AppleDe ...
- IOS开发-图片上传
目前IOS端开发,图片上传到服务器分为两种,一种是直接上到服务器,一种是借助第三方储存(减少服务器压力). 一.直接上传到服务器 /** * 代码演示 */ //*******UIImagePNGRe ...
- iOS 七牛云上传并获取图片----【客户端】
最近做了七牛云存储的有关内容,涉及到与后台交互获取验证的token,无奈,后台自命清高,不与理会,没办法呀,于是自己搞呗.首先呢在在七牛上注册一个账号,然后呢添加一个存储空间这时候空间名 ...
- 【iOS】文件上传小记
iOS由该系统提供API可以实现可以实现文件的上传和下载,有两种方法来. NSURLConnection与NSURLSession. 当中NSURLConnection是使用非常久的的一种方式.NSU ...
随机推荐
- 数据库MySQL经典面试题之SQL语句
数据库MySQL经典面试题之SQL语句 1.需要数据库表1.学生表Student(SID,Sname,Sage,Ssex) --SID 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学 ...
- PHP基础函数、自定义函数以及数组
2.10 星期五 我们已经真正开始学习PHP 了,今天的主要内容是php基础函数.自定义函数以及数组, 内容有点碎,但是对于初学者来说比较重要,下面是对今天所讲内容的整理: 1 php的基本语法和 ...
- mongodb 安装、启动
MongoDB 之 你得知道MongoDB是个什么鬼 MongoDB - 1 最近有太多的同学向我提起MongoDB,想要学习MongoDB,还不知道MongoDB到底是什么鬼,或者说,知道是数据 ...
- libcurl理解和使用
1 libcurl是一个很好的客户端库 2 CURLOPT_URL 就是普通的url. 3 CURLOPT_HTTPHEADER 3.1 http get 4 CURLOPT_WRITEFUNCTIO ...
- Vue 向下扩展后就类似于 jQuery
https://cn.vuejs.org/v2/guide/comparison.html
- exp/imp三种模式——完全、用户、表
ORACLE数据库有两类备份方法.第一类为物理备份,该方法实现数据库的完整恢复,但数据库必须运行在归挡模式下(业务数据库在非归挡模式下运行),且需要极大的外部存储设备,例如磁带库:第二类备份方式为逻辑 ...
- Android笔记之文本随滑块移动的SeekBar
效果图 FloatingTextSeekBar.java package com.bu_ish.blog; import android.content.Context; import android ...
- MongoDB 学习四 : 查询(续)
接着上章,继续介绍MongoDB的查询. Querying on Embedded Documents 有两种方式查询嵌入式的子Documents:查询整个Document或者查询个别的键值对. 查询 ...
- Codeforces Round #394 (Div. 2) C. Dasha and Password —— 枚举
题目链接:http://codeforces.com/problemset/problem/761/C C. Dasha and Password time limit per test 2 seco ...
- World Finals 2017 (水题题解)
看大佬做2017-WF,我这种菜鸡,只能刷刷水题,勉强维持生活. 赛后补补水题. 题目pdf链接,中文的,tls翻译的,链接在这里 个人喜欢在vjudge上面刷题. E Need for Speed ...