概述
1 //
2 //CXNetworkSpeed.m3 //CXNetworkSpeedDemo4 //
5 //Created by xubaoaichiyu on 16/08/16.6 //Copyright © 2016年 xubaoaichiyu All rights reserved.7 //8
9 #import "CXNetworkSpeed.h"
10 #include
11 #include
12 #include
13 #include
14
15 /**16 * @{@"received":@"100kB/s"}17 */
18 NSString *const kNetworkReceivedSpeedNotification = @"kNetworkReceivedSpeedNotification";19
20 /**21 * @{@"send":@"100kB/s"}22 */
23 NSString *const kNetworkSendSpeedNotification = @"kNetworkSendSpeedNotification";24
25 @interfaceCXNetworkSpeed ()26 {27 uint32_t _iBytes;28 uint32_t _oBytes;29 uint32_t _allFlow;30 uint32_t _wifiIBytes;31 uint32_t _wifiOBytes;32 uint32_t _wifiFlow;33 uint32_t _wwanIBytes;34 uint32_t _wwanOBytes;35 uint32_t _wwanFlow;36 }37
38 @property (nonatomic, copy) NSString *receivedNetworkSpeed;39
40 @property (nonatomic, copy) NSString *sendNetworkSpeed;41
42 @property (nonatomic, strong) NSTimer *timer;43
44 @end
45
46 @implementationCXNetworkSpeed47
48 static CXNetworkSpeed * instance =nil;49
50 +(instancetype)shareNetworkSpeed{51 if(instance ==nil){52 staticdispatch_once_t onceToken ;53 dispatch_once(&onceToken, ^{54 instance =[[self alloc] init] ;55 }) ;56 }57 returninstance;58
59 }60
61 + (instancetype)allocWithZone:(struct _NSZone *)zone{62
63 if(instance ==nil){64 staticdispatch_once_t onceToken;65 dispatch_once(&onceToken, ^{66
67 instance =[super allocWithZone:zone];68
69 });70 }71 returninstance;72 }73
74 -(instancetype)init{75
76 staticdispatch_once_t onceToken;77 dispatch_once(&onceToken, ^{78 instance =[super init];79 _iBytes = _oBytes = _allFlow = _wifiIBytes = _wifiOBytes = _wifiFlow = _wwanIBytes = _wwanOBytes = _wwanFlow = 0;80 });81 returninstance;82
83 }84
85 - (void)startMonitoringNetworkSpeed{86 if(_timer)87 [self stopMonitoringNetworkSpeed];88 _timer = [NSTimer scheduledTimerWithTimeInterval:1target:self selector:@selector(netSpeedNotification) userInfo:nil repeats:YES];89 }90
91 - (void)stopMonitoringNetworkSpeed{92 if([_timer isValid]) {93 [_timer invalidate];94 }95 }96
97 - (void)netSpeedNotification{98 [self checkNetworkflow];99 }100
101 -(NSString *)bytesToAvaiUnit:(int)bytes102 {103 if(bytes < 10)104 {105 return [NSString stringWithFormat:@"0KB"];106 }107 else if(bytes >= 10 && bytes < 1024 * 1024) //KB
108 {109 return [NSString stringWithFormat:@"%.1fKB", (double)bytes / 1024];110 }111 else if(bytes >= 1024 * 1024 && bytes < 1024 * 1024 * 1024) //MB
112 {113 return [NSString stringWithFormat:@"%.1fMB", (double)bytes / (1024 * 1024)];114 }115 else //GB
116 {117 return [NSString stringWithFormat:@"%.1fGB", (double)bytes / (1024 * 1024 * 1024)];118 }119 }120
121
122 -(void)checkNetworkflow123 {124 struct ifaddrs *ifa_list = 0, *ifa;125 if (getifaddrs(&ifa_list) == -1)126 {127 return;128 }129
130 uint32_t iBytes = 0;131 uint32_t oBytes = 0;132 uint32_t allFlow = 0;133 uint32_t wifiIBytes = 0;134 uint32_t wifiOBytes = 0;135 uint32_t wifiFlow = 0;136 uint32_t wwanIBytes = 0;137 uint32_t wwanOBytes = 0;138 uint32_t wwanFlow = 0;139 //struct timeval32 time;
140
141 for (ifa = ifa_list; ifa; ifa = ifa->ifa_next)142 {143 if (AF_LINK != ifa->ifa_addr->sa_family)144 continue;145
146 if (!(ifa->ifa_flags & IFF_UP) && !(ifa->ifa_flags &IFF_RUNNING))147 continue;148
149 if (ifa->ifa_data == 0)150 continue;151
152 //network flow
153 if (strncmp(ifa->ifa_name, "lo", 2))154 {155 struct if_data *if_data = (struct if_data *)ifa->ifa_data;156 iBytes += if_data->ifi_ibytes;157 oBytes += if_data->ifi_obytes;158 allFlow = iBytes +oBytes;159 }160
161 //wifi flow
162 if (!strcmp(ifa->ifa_name, "en0"))163 {164 struct if_data *if_data = (struct if_data *)ifa->ifa_data;165 wifiIBytes += if_data->ifi_ibytes;166 wifiOBytes += if_data->ifi_obytes;167 wifiFlow = wifiIBytes +wifiOBytes;168 }169
170 //3G and gprs flow
171 if (!strcmp(ifa->ifa_name, "pdp_ip0"))172 {173 struct if_data *if_data = (struct if_data *)ifa->ifa_data;174 wwanIBytes += if_data->ifi_ibytes;175 wwanOBytes += if_data->ifi_obytes;176 wwanFlow = wwanIBytes +wwanOBytes;177 }178 }179 freeifaddrs(ifa_list);180
181
182 if (_iBytes != 0) {183 self.receivedNetworkSpeed = [[self bytesToAvaiUnit:iBytes - _iBytes] stringByAppendingString:@"/s"];184 [[NSNotificationCenter defaultCenter] postNotificationName:kNetworkReceivedSpeedNotification object:@{@"received":self.receivedNetworkSpeed}];185 }186
187 _iBytes =iBytes;188
189 if (_oBytes != 0) {190 self.sendNetworkSpeed = [[self bytesToAvaiUnit:oBytes - _oBytes] stringByAppendingString:@"/s"];191 [[NSNotificationCenter defaultCenter] postNotificationName:kNetworkSendSpeedNotification object:@{@"send":self.sendNetworkSpeed}];192 }193 _oBytes =oBytes;194 }195 @end
最后
以上就是时尚糖豆为你收集整理的ios 网速监控_iOS 直播-网速监控的全部内容,希望文章能够帮你解决ios 网速监控_iOS 直播-网速监控所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复