-(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;
struct ifaddrs *ifa;
//获取网络端口数据
if (getifaddrs(&ifa_list) == -1){
return;
}
uint32_t wifiIBytes = 0;
uint32_t wifiOBytes = 0;
uint32_t wifiFlow = 0;
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;
}
//WiFi状态下的流量
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;//总流量
wifiFlowValue = wifiFlow - wifiOldFlow;
if (wifiFlowValue < 0) {
wifiFlowValue = 0;
}
wifiOldFlow = wifiFlow;
[self.wifiSpeedLabel setText:[self bytesToAvaiUnit:wifiFlowValue]];
}
}
freeifaddrs(ifa_list);
}