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

时间:2009-10-18 13:20:07

标签: 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或Edge网络上测试相同的方法,它会返回NO(即未连接到互联网)

任何想法为什么?

感谢。

2 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:0)

问题是你没有主动连接,蜂窝调制解调器断电(它在几秒钟不活动后就会发生)。如果你看着你,你会发现needConnection是YES。任何更高级别的API(CFNetwork,NSURLConnection)都将导致自动建立连接。

您可以通过检查kSCNetworkReachabilityFlagsIsWWAN密钥来测试您是否有蜂窝电话。