网络流量总结

葡萄娱乐场,  在开发中,有时候须要取得流量总括消息。研究发现:通过函数getifaddrs来获取系统互联网接口的消息,互联网接口的新闻,包含在if_data字段中,
有无数音讯, 但作者前日只关怀ifi_ibytes, ifi_obytes,
应该正是收取到的字节数和出殡和埋葬的字节数,
加起来就是流量了。还发现,接口的名字, 有en, pdp_ip,
lo等三种方式,en应该是wifi, pdp_ip大致是三g只怕gprs, lo是环回接口,
通过名字分别能够分级计算。

  在开发中,有时候须求取得流量计算音讯。商量发现:通过函数getifaddrs来获得系统互联网接口的音讯,网络接口的音讯,包蕴在if_data字段中,
有无数新闻, 但作者明天只关切ifi_ibytes, ifi_obytes,
应该就是吸收到的字节数和发送的字节数,
加起来便是流量了。还发现,接口的名字, 有en, pdp_ip,
lo等三种情势,en应该是wifi, pdp_ip大致是叁g依旧gprs, lo是环回接口,
通过名字分别能够分别总计。

  

  

1、导入要求头文件

#include <ifaddrs.h>
#include <sys/socket.h>
#include <net/if.h>

 

一、导入须要头文件

#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)];
    }

}

 

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设备的流量相关音讯,计算的是上次开机到现在的流量新闻. 

   二、下边两艺术计算的结果是字符串格式

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)];
    }
}

 

留神:一、通过读取系统网络接口新闻,获取当前iphone设备的流量相关音信,计算的是上次开机于今的流量消息. 

   贰、上面两措施总结的结果是字符串格式