• iphone获取当前流量信息


    通过读取系统网络接口信息,获取当前iphone设备的流量相关信息,统计的是上次开机至今的流量信息. 

    代码 悦德财富:https://yuedecaifu.com

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    -(void)checkNetworkflow{
        struct ifaddrs *ifa_list = 0, *ifa;
        if (getifaddrs(&ifa_list) == -1)
        {
            return;
        }
         
        uint32_t iBytes     = 0;
        uint32_t oBytes     = 0;
        uint32_t allFlow    = 0;
        uint32_t wifiIBytes = 0;
        uint32_t wifiOBytes = 0;
        uint32_t wifiFlow   = 0;
        uint32_t wwanIBytes = 0;
        uint32_t wwanOBytes = 0;
        uint32_t wwanFlow   = 0;
        struct timeval time ;
         
        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.
            // network flow
            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;
                allFlow = iBytes + oBytes;
                time = if_data->ifi_lastchange;
            }
             
            //wifi flow
            if (!strcmp(ifa->ifa_name, "en0"))  
            
                struct if_data *if_data = (struct if_data *)ifa->ifa_data; 
                 
                wifiIBytes += if_data->ifi_ibytes; 
                wifiOBytes += if_data->ifi_obytes;
                wifiFlow    = wifiIBytes + wifiOBytes;
            
             
            //3G and gprs flow
            if (!strcmp(ifa->ifa_name, "pdp_ip0"))  
            
                struct if_data *if_data = (struct if_data *)ifa->ifa_data; 
                 
                wwanIBytes += if_data->ifi_ibytes; 
                wwanOBytes += if_data->ifi_obytes; 
                wwanFlow    = wwanIBytes + wwanOBytes;
            }
        }
        freeifaddrs(ifa_list);   
        changeTime.text     = [NSString stringWithFormat:@"%s",ctime(&time)];   
        receivedBytes.text  = [self bytesToAvaiUnit:[NSString stringWithFormat:@"%u",iBytes]];
        sentBytes.text      = [self bytesToAvaiUnit:[NSString stringWithFormat:@"%u",oBytes]];
        networkFlow.text    = [self bytesToAvaiUnit:[NSString stringWithFormat:@"%u",allFlow]];
        wifiReceived.text   = [self bytesToAvaiUnit:[NSString stringWithFormat:@"%u",wifiIBytes]];
        wifiSent.text       = [self bytesToAvaiUnit:[NSString stringWithFormat:@"%u",wifiOBytes]];
        wifiBytes.text      = [self bytesToAvaiUnit:[NSString stringWithFormat:@"%u",wifiFlow]];
        wwanReceived.text   = [self bytesToAvaiUnit:[NSString stringWithFormat:@"%u",wwanIBytes]];
        wwanSent.text       = [self bytesToAvaiUnit:[NSString stringWithFormat:@"%u",wwanOBytes]];
        wwanBytes.text      = [self bytesToAvaiUnit:[NSString stringWithFormat:@"%u",wwanFlow]];
    }
  • 相关阅读:
    条款十四 在资源管理类中小心copying行为
    条款八 别让异常逃离析构函数
    条款五 了解C++默默的编写并调用的哪些函数
    volatile——C++关键字(转)
    C++ auto_ptr(转)
    条款十三 以对象管理资源
    优秀文章收集(更新中..)
    条款十一 在operator = 中处理"自我赋值"
    TCP协议疑难杂症全景解析(转)
    大四的迷茫
  • 原文地址:https://www.cnblogs.com/oceansea/p/5952589.html
Copyright © 2020-2023  润新知