ฉันค้นหาในหัวข้อนี้ แต่พบรายละเอียดน้อยมากซึ่งเป็นประโยชน์ ด้วยรายละเอียดเหล่านี้ฉันได้ลองทำโค้ดบางส่วนดังนี้
หมายเหตุ: โปรดเปรียบเทียบรายละเอียดที่แชร์ในโพสต์นี้กับโพสต์อื่นก่อนที่จะทำเครื่องหมายว่า DUPLICATE ไม่ใช่เฉพาะเรื่อง
- (NSArray *)getDataCountersForType:(int)type {
BOOL success;
struct ifaddrs *addrs = nil;
const struct ifaddrs *cursor = nil;
const struct sockaddr_dl *dlAddr = nil;
const struct if_data *networkStatisc = nil;
int dataSent = 0;
int dataReceived = 0;
success = getifaddrs(&addrs) == 0;
if (success) {
cursor = addrs;
while (cursor != NULL) {
if (cursor->ifa_addr->sa_family == AF_LINK) {
dlAddr = (const struct sockaddr_dl *) cursor->ifa_addr;
networkStatisc = (const struct if_data *) cursor->ifa_data;
if (type == WiFi) {
dataSent += networkStatisc->ifi_opackets;
dataReceived += networkStatisc->ifi_ipackets;
}
else if (type == WWAN) {
dataSent += networkStatisc->ifi_obytes;
dataReceived += networkStatisc->ifi_ibytes;
}
}
cursor = cursor->ifa_next;
}
freeifaddrs(addrs);
}
return [NSArray arrayWithObjects:[NSNumber numberWithInt:dataSent], [NSNumber numberWithInt:dataReceived], nil];
}
รหัสนี้รวบรวมข้อมูลการใช้อินเทอร์เน็ตของอุปกรณ์ iPhone (ไม่ใช่แอปพลิเคชันของฉันคนเดียว)
ตอนนี้ถ้าผมใช้อินเทอร์เน็ตผ่าน WiFi หรือผ่าน 3G, ฉันได้รับข้อมูล (ไบต์) เฉพาะในifi_obytes
(ส่ง) และifi_ibytes
(ที่ได้รับ) แต่ผมคิดว่าผมควรจะได้รับการใช้งานอินเตอร์เน็ตไร้สายในและifi_opackets
ifi_ipackets
นอกจากนี้ยังต้องการเพิ่มว่าถ้าฉันเชื่อมต่อกับเครือข่าย WiFi แต่ผมไม่ได้ใช้อินเทอร์เน็ตผมยังคงได้รับมูลค่าเพิ่มให้กับและifi_obytes
ifi_ibytes
อาจเป็นฉันผิดในการใช้งานหรือความเข้าใจ ต้องการใครสักคนที่จะช่วยฉันออก
แก้ไข: แทนที่จะAF_LINK
ลองAF_INET
( sockaddr_in
แทนsockaddr_dl
) แอปพลิเคชันขัดข้อง