iOS 流量统计,ios流量统计


在网上查了一下关于流量统计的资料,整理了一下Demo地址


#import "FolwBytesTools.h"

#include <arpa/inet.h>

#include <net/if.h>

#include <ifaddrs.h>

#include <net/if_dl.h>


typedef enum {

    

    FolwBytesNumWiFiSent     = 1, //WiFi状态下发送流量

    FolwBytesNumWiFiReceived = 2, //WiFi状态下接收流量

    FolwBytesNumWiFiTotal    = 3, //WiFi状态下消耗总流量

    FolwBytesNumWWANSent     = 4, //移动网络下发送流量

    FolwBytesNumWWANReceived = 5, //移动网络下接收流量

    FolwBytesNumWWANTotal    = 6, //移动网络下消耗总流量

    

}FolwBytesNum;


@implementation FolwBytesTools


+(FolwBytesTools *)sharedInstance

{

    static dispatch_once_t onceToken;

    static FolwBytesTools * sSharedInstance;

    dispatch_once(&onceToken, ^{

        sSharedInstance = [[FolwBytesTools alloc] init];

    });

    return sSharedInstance;

}


/*

 WiFi状态下发送流量

 */

- (NSString *)getWiFiSentFolwBytes

{

    NSString *bytesStr;

    

    bytesStr = [self getFolwBytesWithTyep:FolwBytesNumWiFiSent];

    

    return bytesStr;

}


/*

 WiFi状态下接收流量

 */

- (NSString *)getWiFiReceivedFolwBytes

{

    NSString *bytesStr;

    

    bytesStr = [self getFolwBytesWithTyep:FolwBytesNumWiFiReceived];

    

    return bytesStr;

}


/*

 WiFi状态下消耗总流量

 */

- (NSString *)getWiFiTotalFolwBytes

{

    NSString *bytesStr;

    

    bytesStr = [self getFolwBytesWithTyep:FolwBytesNumWiFiTotal];

    

    return bytesStr;

}


/*

 WiFi状态下单个请求消耗流量

 */

- (NSString *)getWiFiFolwDifferenceBytes

{

    NSString *bytesStr;

    

    bytesStr = [self getFolwBytesWithTyep:FolwBytesNumWiFiTotal];

    

    NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];

    NSString *dBytes = [userDefault objectForKey:@"WiFiFolwDifferenceBytes"];

    

    [userDefault setObject:bytesStr forKey:@"WiFiFolwDifferenceBytes"];

    [userDefault synchronize];

    

    NSInteger nowBytes = [bytesStr integerValue];

    

    NSInteger oldBytes = [dBytes integerValue];

    

    NSInteger dIntBytes = nowBytes - oldBytes;

    

    bytesStr = [NSString stringWithFormat:@"%ld",dIntBytes];

    

    return bytesStr;

}


/*

 移动网络下发送流量

 */

- (NSString *)getWWANSentFolwBytes

{

    NSString *bytesStr;

    

    bytesStr = [self getFolwBytesWithTyep:FolwBytesNumWWANSent];

    

    return bytesStr;

}


/*

 移动网络下接收流量

 */

- (NSString *)getWWANReceivedFolwBytes

{

    NSString *bytesStr;

    

    bytesStr = [self getFolwBytesWithTyep:FolwBytesNumWWANReceived];

    

    return bytesStr;

}


/*

 移动网络下消耗总流量

 */

- (NSString *)getWWANTotalFolwBytes

{

    NSString *bytesStr;

    

    bytesStr = [self getFolwBytesWithTyep:FolwBytesNumWWANTotal];

    

    return bytesStr;

}


/*

 移动网络下单个请求消耗流量

 */

- (NSString *)getWWANFolwDifferenceBytes

{

    NSString *bytesStr;

    

    bytesStr = [self getFolwBytesWithTyep:FolwBytesNumWiFiTotal];

    

    NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];

    NSString *dBytes = [userDefault objectForKey:@"WWANFolwDifferenceBytes"];

    

    [userDefault setObject:bytesStr forKey:@"WWANFolwDifferenceBytes"];

    [userDefault synchronize];

    

    NSInteger nowBytes = [bytesStr integerValue];

    

    NSInteger oldBytes = [dBytes integerValue];

    

    NSInteger dIntBytes = nowBytes - oldBytes;

    

    bytesStr = [NSString stringWithFormat:@"%ld",dIntBytes];

    

    return bytesStr;

}


- (NSString *)getFolwBytesWithTyep:(FolwBytesNum)typeNum

{

    NSString *bytesStr;

    BOOL success;

    struct ifaddrs *addrs;

    const struct ifaddrs *cursor;

    const struct if_data *networkStatisc;

    int WiFiSent = 0;

    int WiFiReceived = 0;

    int WWANSent = 0;

    int WWANReceived = 0;

    NSString *name=[[NSString alloc]init];

    success = getifaddrs(&addrs) == 0;

    if (success) {

        cursor = addrs;

        while (cursor != NULL) {

            name=[NSString stringWithFormat:@"%s",cursor->ifa_name];

            

            if (cursor->ifa_addr->sa_family == AF_LINK) {

                //wifi消耗流量

                if ([name hasPrefix:@"en"]) {

                    networkStatisc = (const struct if_data *) cursor->ifa_data;

                    WiFiSent+=networkStatisc->ifi_obytes;

                    WiFiReceived+=networkStatisc->ifi_ibytes;

                }

                

                //移动网络消耗流量

                if ([name hasPrefix:@"pdp_ip0"]) {

                    networkStatisc = (const struct if_data *) cursor->ifa_data;

                    WWANSent+=networkStatisc->ifi_obytes;

                    WWANReceived+=networkStatisc->ifi_ibytes;

                }

            }

            cursor = cursor->ifa_next;

        }

        freeifaddrs(addrs);

    }

    if(typeNum == FolwBytesNumWiFiSent)

    {

        bytesStr = [NSString stringWithFormat:@"%d",WiFiSent];

    }else if(typeNum == FolwBytesNumWiFiReceived)

    {

        bytesStr = [NSString stringWithFormat:@"%d",WiFiReceived];

    }else if(typeNum == FolwBytesNumWiFiTotal)

    {

        bytesStr = [NSString stringWithFormat:@"%d",WiFiSent + WiFiReceived];

    }else if(typeNum == FolwBytesNumWWANSent)

    {

        bytesStr = [NSString stringWithFormat:@"%d",WWANSent];

    }else if(typeNum == FolwBytesNumWWANReceived)

    {

        bytesStr = [NSString stringWithFormat:@"%d",WWANReceived];

    }else if(typeNum == FolwBytesNumWWANTotal)

    {

        bytesStr = [NSString stringWithFormat:@"%d",WWANSent+WWANReceived];

    }

    

    return bytesStr;

}


相关内容

    暂无相关文章