在开发中要获取网络类型是很简单的,导入Reachability直接获取状态就行了,现在我们要做一个类似下载器的那种实时把上传下载速度显示出来。

需要用到的头文件

使用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 = 0;

long tempWiFiReceived = 0;

long tempWWANSend = 0;

long tempWWANReceived = 0;

NSString *dataName;

success = getifaddrs(&addrs) == 0;

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/1024;

monitorData.wifiReceived = tempWiFiReceived/1024;

monitorData.wwanSend = tempWWANSend/1024;

monitorData.wwanReceived = tempWWANReceived/1024;

return monitorData;

}

@end

粘贴的格式错乱了自己排序一下,哈哈希望对大家有帮助。

网盘是有代码,要的拿走:

https://pan.baidu.com/s/1c1Xq5Ao

如需转载标明出处

各位看官觉得有用的话就请Yes-Cui喝瓶水吧,打赏一个

ios 网速监控_IOS实时监控上传下载速度相关推荐

  1. 电脑上传网速怎么测试软件,宽带上传速度怎么测试 教你如何看电脑宽带上传速度...

    网速一般分为下载速度和上传速度,一般我们测算网速只是测试下载速度,只要电脑从网上下载速度快,用户通常比较满意.但你知道吗?上传速度也是值得关注的,尤其是在云网络时代,很多朋友都要传文件到网盘或者视频网 ...

  2. ios 自动打包命令_iOS自动打包上传脚本

    自从将swift2.2升级到swift3.0, 每次使用Xcode8编译都很慢,很是不爽,于是有了研究下xcodebuild命令行打包的想法,起初不知道用shell,还是用python, 在网上大概搜 ...

  3. 实时网速监测app_实时网速安卓下载_实时网速监测安卓app下载-XP软件园

    详情介绍 实时网速安卓是一款简单实用的手机网速监测工具,自身的体积只有2m大小,对手机运行的网速数字显示最新网速,掌握目前手机网速情况,需要就来下载实时网速安卓吧. 实时网速安卓介绍 实时网速监测安卓 ...

  4. 智能监控系统、人脸识别、智能抓拍、预警系统、机动车辆抓拍、行人抓拍、监控预警管理后台、人流监控、人脸信息采集、语音报警、轨迹分析、抓拍检索、园区监控、实时监控、录像回放、防盗预警、智能算法、跟踪分析

    智能监控系统.人脸识别.智能抓拍.预警系统.机动车辆抓拍.行人抓拍.监控预警管理后台.人流监控.人脸信息采集.语音报警.轨迹分析.抓拍检索.园区监控.实时监控.录像回放.防盗预警.智能算法.跟踪分析. ...

  5. ABB机器人socket通讯实时位置上传,中断触发

    一.中断.多线程.多任务 中断是一种使CPU中止正在执行的程序而转去处理特殊事件的操作.在运行一个程序的过程中,断续地以"插入"方式执行一些完成特定处理功能的程序段. 硬件多线程是 ...

  6. Unity iOS 之 [iOS]App上架流程[利用Archive进行上传]

    [iOS]App上架流程[利用Archive进行上传] 准备: 1. 一个开发者账号(需要交过钱的,?好黑) 2. 一个做完的项目 检查: 1. 你的Xcode必须是正式版,不可以是beta版本(不能 ...

  7. H5调用手机摄像头,实时拍照上传(旧)

    H5调用手机摄像头,完成拍照,实时上传(旧) 项目开发中,偶尔会遇到网页中调用手机摄像头,通过相册选择或直接实时拍照的方式,完成图片上传的功能型需求. 今天,就通过一个小的案例,演示一下完整的实现流程 ...

  8. JS调用摄像头、实时视频流上传(一次不成功的试验)

    JS调用摄像头.实时视频流上传(一次不成功的试验) 思路 前端调用摄像头,获取视频流,从视频流中取一帧转图片,用websocket上传图片. 研究了一下发现了WebRTC这种技术,看到有博客说一些直播 ...

  9. 网安基础学习之“文件上传漏洞原理与实现”

    网安基础学习之"文件上传漏洞原理与实现" 近期新闻头条上报出了"长沙市场监管局网站被上传了黄色页面",经过长沙市公安局网技支队的排查,该门户网站后台编辑器存在* ...

最新文章

  1. 【ACM】杭电OJ 2063
  2. AAAI 2021 | 时间序列相关论文汇总
  3. 一起学nRF51xx 10 -  rng
  4. 2020年高等数学方法与提高(上海理工大学)学习笔记:常微分方程
  5. WinForm给ComboBox增加Value(转)
  6. 统计信息自动收集任务失效原因排查
  7. 亚马逊消费者业务宣布永久关闭 Oracle 数据库,去O新进展;华为发布最新5G全系列解决方案;苹果正研究新设备“智能戒指”……...
  8. 【华为云技术分享】LiteOS无法直接烧录或者烧录失败解决方法--ST-Link
  9. 算法导论6:排序小结和最值取法 2016.1.6
  10. python __name__怎么使用_python学习笔记26(python中__name__的使用)
  11. Linux文件内容查阅
  12. 人工智能再次参加高考:和作家比写作文,AI能打多少分?
  13. JavaScript基础流程控制(3)
  14. java命令行参数是什么_Java实验课:命令行参数是什么?
  15. Windows Server 2008 R2将tomcat添加进系统服务
  16. Linux中使用sed命令替换字符串
  17. 基于token的多平台身份认证架构设计
  18. linux下的文件系统,Linux系统中常见的文件系统有哪些?
  19. 【笔记】【一文解决】linux - grep、sed、awk 『三剑客』
  20. 【元宵节】中国人民大学与加拿大女王大学金融硕士项目与你的那份“缘”

热门文章

  1. 将oracle中的逗号转成全角,ORACLE SQL半角全角转换
  2. PowerPoint绘图笔不能用
  3. 《飞猪规则》 第八章 国外景点门票类商品发布规范
  4. suse 调整分区_【suse】挂载硬盘,磁盘分区方法
  5. 关于写“好“代码的一些思路
  6. 手机短视频伪原创 视频消重和改md5
  7. ios 制作手机端拼图游戏及衍生的其他内容
  8. Aspose.PSD for .NET 22.11.0 Crack
  9. 用VB代码把4位数字转化为汉字数字
  10. 自定义圆形进度条跟随logo及数字进度