我是靠谱客的博主 时尚糖豆,最近开发中收集的这篇文章主要介绍ios 网速监控_iOS 直播-网速监控,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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 直播-网速监控所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(59)

评论列表共有 0 条评论

立即
投稿
返回
顶部