iPhone - 检查互联网连接是否可用

los*_*sit 0 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; 
Run Code Online (Sandbox Code Playgroud)

当我的设备连接到wifi网络时,此方法返回预期结果.但是,如果我在3G或Edge网络上测试相同的方法,它会返回NO(即未连接到互联网)

有什么想法吗?

谢谢.

Ken*_*ner 6

查看Apple的代码示例"Reachability",并查看注释的顶部,了解如何在异步模式下使用它:

http://developer.apple.com/IPhone/library/samplecode/Reachability/index.html