我正在使用以下代碼來確定互聯網連接是否存在。iPhone - 檢查互聯網連接是否可用
struct sockaddr_in zeroAddress;
bzero(&zeroAddress, sizeof(zeroAddress));
zeroAddress.sin_len = sizeof(zeroAddress);
zeroAddress.sin_family = AF_INET;
// Recover reachability flags
SCNetworkReachabilityRef defaultRouteReachability = SCNetworkReachabilityCreateWithAddress(NULL, (struct sockaddr*)&zeroAddress);
SCNetworkReachabilityFlags flags;
BOOL didRetrieveFlags = SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags);
CFRelease(defaultRouteReachability);
if (!didRetrieveFlags) {
NSLog(@"Error. Could not recover network reachability flags");
return 0;
}
BOOL isReachable = flags & kSCNetworkFlagsReachable;
BOOL needsConnection = flags & kSCNetworkFlagsConnectionRequired;
return (isReachable && !needsConnection) ? YES : NO;
此方法返回我的設備連接到wifi網絡時的預期結果。但是,如果我在3G或邊緣網絡上測試相同的方法,則返回NO(即未連接到互聯網)
任何想法爲什麼?
謝謝。
有爲什麼你需要預檢這個特別的理由檢查?蘋果的建議並不是:繼續嘗試談談你需要談論的內容,並且準備好處理可達性結果。 iPhone上的網絡條件可能非常短暫。 – 2009-10-19 01:05:07
我想根據不同的條件顯示不同的輸出 - 如果服務器出現問題,信息會有所不同,如果沒有互聯網連接,它會再次不同 – lostInTransit 2009-10-19 02:58:15