我正在使用以下代码来确定互联网连接是否存在。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