আমি এই বিষয়ে অনুসন্ধান করেছি কিন্তু খুব কম বিশদ খুঁজে পেয়েছি যা সহায়ক ছিল। এই বিবরণ দিয়ে আমি নিম্নলিখিত হিসাবে কিছু কোড রান্না করার চেষ্টা করেছি।
দ্রষ্টব্য: অনুগ্রহ করে এই পোস্টে ভাগ করা বিশদটি কেবলমাত্র বিষয় দ্বারা নয়, এটি ডুপ্লিকেট হিসাবে চিহ্নিত করার আগে অন্যান্য পোস্টগুলির সাথে তুলনা করুন।
- (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];
}
এই কোডটি একটি আইফোন ডিভাইসের ইন্টারনেট ব্যবহারের তথ্য সংগ্রহ করে (এবং কেবল আমার অ্যাপ্লিকেশন নয়)।
এখন, আমি যদি ওয়াইফাই বা 3 জি এর মাধ্যমে ইন্টারনেট ব্যবহার করি তবে আমি কেবলমাত্র ifi_obytes
(প্রেরিত) এবং ifi_ibytes
(প্রাপ্ত) ডেটা (বাইট) পাই তবে আমার মনে হয় ifi_opackets
এবং আমার ওয়াইফাই ব্যবহার করা উচিত ifi_ipackets
।
এছাড়াও যোগ করার জন্য যে যদি আমি একটি ওয়াইফাই নেটওয়ার্কে সংযুক্ত, কিন্তু ইন্টারনেট ব্যবহার করছি না, আমার এখনও মান যুক্ত হয়ে চেয়েছিলেন ifi_obytes
এবং ifi_ibytes
।
আমি বাস্তবায়ন বা বুঝতে ভুল হতে পারে। আমাকে সাহায্য করার জন্য কেউ প্রয়োজন।
সম্পাদনা করুন: পরিবর্তে AF_LINK
আমি চেষ্টা করেছি AF_INET
( sockaddr_in
পরিবর্তে sockaddr_dl
)। এটি অ্যাপ্লিকেশনটিকে ক্র্যাশ করে।