나는이 주제를 검색했지만 도움이되는 세부 사항을 거의 발견하지 못했습니다. 이러한 세부 사항으로 다음과 같이 코드를 요리하려고했습니다.
참고 :이 게시물에서 공유 된 세부 정보를 다른 게시물과 비교 한 후 주제가 아니라 중복으로 표시하십시오.
- (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
(수신)으로 만 데이터 (바이트) 를 얻지 만 WiFi 사용을 ifi_opackets
및로 가져와야한다고 생각합니다 ifi_ipackets
.
또한 내가 WiFi 네트워크에 연결 해요,하지만 인터넷을 사용하고 있지 않다 경우, 난 여전히 가치가 추가됩니다 것을 추가하고 싶어 ifi_obytes
하고 ifi_ibytes
.
구현 또는 이해가 잘못되었을 수 있습니다. 나를 도울 사람이 필요합니다.
편집 : 대신 () 대신 AF_LINK
시도했습니다 . 응용 프로그램이 충돌합니다.AF_INET
sockaddr_in
sockaddr_dl