iOS 流量統計,ios流量統計

來源:互聯網
上載者:User

iOS 流量統計,ios流量統計

  在開發中,有時候需要擷取流量統計資訊。研究發現:通過函數getifaddrs來得到系統網路介面的資訊,網路介面的資訊,包含在if_data欄位中, 有很多資訊, 但我現在只關心ifi_ibytes, ifi_obytes, 應該就是接收到的位元組數和發送的位元組數, 加起來就是流量了。還發現,介面的名字, 有en, pdp_ip, lo等幾種形式,en應該是wifi, pdp_ip大概是3g或者gprs, lo是環回介面, 通過名字區分可以分別統計。

  

1、匯入必要標頭檔
#include <ifaddrs.h>#include <sys/socket.h>#include <net/if.h>

 

2、擷取3G或者GPRS的流量
//擷取3G或者GPRS的流量+ (NSString *)getGprs3GFlowIOBytes{        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;                //3G或者GPRS        if (!strcmp(ifa->ifa_name, "pdp_ip0"))        {            struct if_data *if_data = (struct if_data *)ifa->ifa_data;                        iBytes += if_data->ifi_ibytes;            oBytes += if_data->ifi_obytes;            NSLog(@"%s :iBytes is %d, oBytes is %d",                  ifa->ifa_name, iBytes, oBytes);        }    }            freeifaddrs(ifa_list);        uint32_t bytes = 0;        bytes = iBytes + oBytes;        //將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)];    }}

 

3、擷取Wifi流量
//擷取Wifi流量+ (NSString *)getGprsWifiFlowIOBytes{    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;                //Wifi        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;            NSLog(@"%s :iBytes is %d, oBytes is %d", ifa->ifa_name, iBytes, oBytes);        }    }        freeifaddrs(ifa_list);        uint32_t bytes = 0;        bytes = iBytes+oBytes;        NSLog(@"%d",bytes);        //將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)];    }}

 

注意:1、通過讀取系統網路介面資訊,擷取當前iphone裝置的流量相關資訊,統計的是上次開機至今的流量資訊. 

   2、上面兩方法統計的結果是字串格式

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.