iOS 流量统计

匿名 (未验证) 提交于 2019-12-03 00:21:02

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


#import "FolwBytesTools.h"

#include <arpa/inet.h>

#include <net/if.h>

#include <ifaddrs.h>

#include <net/if_dl.h>


typedef enum {

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

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

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

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

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

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

}FolwBytesNum;


@implementation FolwBytesTools


+(FolwBytesTools *)sharedInstance

{

static dispatch_once_t onceToken;

static FolwBytesTools * sSharedInstance;

dispatch_once(&onceToken, ^{

FolwBytesTools alloc] init];

return sSharedInstance;

}


/*

- (NSString *)getWiFiSentFolwBytes

{

NSString *bytesStr;

self getFolwBytesWithTyep:FolwBytesNumWiFiSent];

return bytesStr;

}


/*

- (NSString *)getWiFiReceivedFolwBytes

{

NSString *bytesStr;

self getFolwBytesWithTyep:FolwBytesNumWiFiReceived];

return bytesStr;

}


/*

- (NSString *)getWiFiTotalFolwBytes

{

NSString *bytesStr;

self getFolwBytesWithTyep:FolwBytesNumWiFiTotal];

return bytesStr;

}


/*

- (NSString *)getWiFiFolwDifferenceBytes

{

NSString *bytesStr;

self getFolwBytesWithTyep:FolwBytesNumWiFiTotal];

NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];

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

setObject:bytesStr forKey:@"WiFiFolwDifferenceBytes"];

synchronize];

NSInteger nowBytes = [bytesStr integerValue];

NSInteger oldBytes = [dBytes integerValue];

NSInteger dIntBytes = nowBytes - oldBytes;

NSString stringWithFormat:@"%ld",dIntBytes];

return bytesStr;

}


/*

- (NSString *)getWWANSentFolwBytes

{

NSString *bytesStr;

self getFolwBytesWithTyep:FolwBytesNumWWANSent];

return bytesStr;

}


/*

- (NSString *)getWWANReceivedFolwBytes

{

NSString *bytesStr;

self getFolwBytesWithTyep:FolwBytesNumWWANReceived];

return bytesStr;

}


/*

- (NSString *)getWWANTotalFolwBytes

{

NSString *bytesStr;

self getFolwBytesWithTyep:FolwBytesNumWWANTotal];

return bytesStr;

}


/*

- (NSString *)getWWANFolwDifferenceBytes

{

NSString *bytesStr;

self getFolwBytesWithTyep:FolwBytesNumWiFiTotal];

NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];

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

setObject:bytesStr forKey:@"WWANFolwDifferenceBytes"];

synchronize];

NSInteger nowBytes = [bytesStr integerValue];

NSInteger oldBytes = [dBytes integerValue];

NSInteger dIntBytes = nowBytes - oldBytes;

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

getifaddrs(&addrs) == 0;

if (success) {

while (cursor != NULL) {

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

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

//wifi消耗流量

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

const struct if_data *) cursor->ifa_data;

ifi_obytes;

ifi_ibytes;

//移动网络消耗流量

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

const struct if_data *) cursor->ifa_data;

ifi_obytes;

ifi_ibytes;

ifa_next;

freeifaddrs(addrs);

if(typeNum == FolwBytesNumWiFiSent)

NSString stringWithFormat:@"%d",WiFiSent];

else if(typeNum == FolwBytesNumWiFiReceived)

NSString stringWithFormat:@"%d",WiFiReceived];

else if(typeNum == FolwBytesNumWiFiTotal)

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

else if(typeNum == FolwBytesNumWWANSent)

NSString stringWithFormat:@"%d",WWANSent];

else if(typeNum == FolwBytesNumWWANReceived)

NSString stringWithFormat:@"%d",WWANReceived];

else if(typeNum == FolwBytesNumWWANTotal)

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

return bytesStr;

}


文章来源: iOS 流量统计
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!