ios實時網(wǎng)速監(jiān)控

思路:先獲取到總的流量信息,然后用當前的總下行流量減去上一秒的下行流量得到網(wǎng)速!


#include <ifaddrs.h>

#include <arpa/inet.h>

#include <net/if.h>

@property (nonatomic, assign)long long int lastBytes;
@property (nonatomic, assign)BOOL isFirstRate;
@property (weak, nonatomic) IBOutlet UILabel *rateLabel;

- (long long) getInterfaceBytes

{
    
    struct ifaddrs *ifa_list = 0, *ifa;
    
    if (getifaddrs(&ifa_list) == -1)
        
    {
        
        return 0;
        
    }
    
    
    uint32_t iBytes = 0;//下行
    
    uint32_t oBytes = 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;
        
        /* Not a loopback device. */
        
        if (strncmp(ifa->ifa_name, "lo", 2))
            
        {
            
            struct if_data *if_data = (struct if_data *)ifa->ifa_data;
            
            
            iBytes += if_data->ifi_ibytes;
            
            oBytes += if_data->ifi_obytes;
            
        }
        
    }
    
    freeifaddrs(ifa_list);
    
    
    
    NSLog(@"\n[getInterfaceBytes-Total]%d,%d",iBytes,oBytes);
    
    return iBytes;
    
}

- (void)getInternetface {
    
    long long int rate;
    
    long long int currentBytes = [self getInterfaceBytes];
    
    if(self.lastBytes) {
        
        //用上當前的下行總流量減去上一秒的下行流量達到下行速錄
        
        rate = currentBytes -self.lastBytes;
        
    }else{
        
        self.isFirstRate=NO;
    }
    //保存上一秒的下行總流量
    self.lastBytes= [self getInterfaceBytes];
    
    //格式化一下
    NSString*rateStr = [self formatNetWork:rate];
    
    NSLog(@"當前網(wǎng)速%@",rateStr);
    
    _rateLabel.text = rateStr;
    
//    NSLog(@"hehe:%lld",hehe/1024/1024);
    
}

- (NSString*)formatNetWork:(long long int)rate {
    
    if(rate <1024) {
        
        return[NSString stringWithFormat:@"%lldB/秒", rate];
        
    }else if(rate >=1024&& rate <1024*1024) {
        
        return[NSString stringWithFormat:@"%.1fKB/秒", (double)rate /1024];
        
    }else if(rate >=1024*1024 && rate <1024*1024*1024){
        
        return[NSString stringWithFormat:@"%.2fMB/秒", (double)rate / (1024*1024)];
        
    }else{
        return@"10Kb/秒";
    };
}
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容