zoukankan      html  css  js  c++  java
  • ios统计流量代码

    #include <ifaddrs.h>  

    #include <sys/socket.h>  

    #include <net/if.h>

     

    1.3G/GPRS流量统计

    int 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;

            

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

        

        return iBytes + oBytes;

    }

    2.WIFI流量统计功能

    - (long long int)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;

                

                //            NSLog(@"%s :iBytes is %d, oBytes is %d",

                //                  ifa->ifa_name, iBytes, oBytes);

            }

        }

        freeifaddrs(ifa_list);

        

        return iBytes+oBytes;  

    }

    转换方法

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

        }

    }

  • 相关阅读:
    struts2工作流程
    单播,多播(组播),广播,详细讲解呀
    UDP和TCP两种协议的传输数据长度分析
    内置方法 call enter exit
    内置方法 new-del
    内置方法 str-repr
    疏忽知识点记忆(待补充)
    判断一个数据类型的属性的多种方法与判断是否是继承
    反射
    初始化,实例化
  • 原文地址:https://www.cnblogs.com/chenhaosuibi/p/4243773.html
Copyright © 2011-2022 走看看