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

        }

    }

  • 相关阅读:
    Linux
    springboot gateway 动态路由-01
    springboot远程debug调试
    springboot使用策略模式实现一个基本的促销
    springboot swagger2案例
    Tcp三次握手四次挥手个人学习
    springboot使用自定义注解和反射实现一个简单的支付
    java后端使用token处理表单重复提交
    基于redis实现未登录购物车
    java中的VO、PO、BO、DAO、POJO
  • 原文地址:https://www.cnblogs.com/chenhaosuibi/p/4243773.html
Copyright © 2011-2022 走看看