मैंने इस विषय पर खोज की है, लेकिन बहुत कम विवरण मिले जो मददगार थे। इन विवरणों के साथ मैंने कुछ कोड पकाने की कोशिश की है।
नोट: कृपया इस पोस्ट में साझा किए गए विवरण की तुलना 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 डिवाइस के इंटरनेट उपयोग की जानकारी एकत्र करता है (और अकेले मेरा आवेदन नहीं)।
अब, यदि मैं वाईफाई के माध्यम से या 3 जी के माध्यम से इंटरनेट का उपयोग करता हूं, तो मुझे केवल ifi_obytes(भेजे गए) और ifi_ibytes(प्राप्त) में डेटा (बाइट्स) मिलता है, लेकिन मुझे लगता है कि मुझे वाईफाई उपयोग में ifi_opacketsऔर प्राप्त करना चाहिए ifi_ipackets।
इसके अलावा जोड़ने के लिए है कि अगर मैं एक WiFi नेटवर्क से कनेक्ट हूँ, लेकिन इंटरनेट का उपयोग नहीं कर रहा हूँ, मैं अभी भी मूल्य में जुड़ती चाहता था ifi_obytesऔर ifi_ibytes।
हो सकता है कि मैं कार्यान्वयन या समझ में गलत हूं। मेरी मदद करने के लिए किसी की जरूरत है।
संपादित करें: इसके बजाय AF_LINKमैंने कोशिश की AF_INET( sockaddr_inइसके बजाय sockaddr_dl)। इससे एप्लिकेशन क्रैश हो जाता है।