小白请教Reachability的用法
// 是否wifi
+ (BOOL) IsEnableWIFI {
return ([[Reachability reachabilityForLocalWiFi] currentReachabilityStatus] != NotReachable);
}
// 是否3G
+ (BOOL) IsEnable3G {
return ([[Reachability reachabilityForInternetConnection] currentReachabilityStatus] != NotReachable);
}
这样判断设备网络是3G环境和WIFI环境,那么在没有WIFI也没有3G的情况怎么检测?(!IsEnableWIFI && !IsEnable3G)?
我想检测是否已不能连接上网络,一定要调用Reachability reachabilityWithHostName:@“URL”这个么?
我现在的难题是,不知道如何检测连接已断开。
--------------------编程问答-------------------- 如果这两个都返回NO很显然网络已经断开了。。。。 --------------------编程问答-------------------- 两个括起来,if语句如果是这两个就走你的 反之看你是return还是什么 --------------------编程问答-------------------- 你可以向服务器发包,如果在你设定时间内还没有收到服务器回的包,那么就说明你和服务器断开连接了 --------------------编程问答-------------------- [[Reachability reachabilityForInternetConnection] currentReachabilityStatus] == NotReachable
这样就是没有网络连接 --------------------编程问答-------------------- typedef enum {
NotReachable = 0, //无网络
ReachableViaWiFi, //wifi 网络
ReachableViaWWAN // 3g网络
} NetworkStatus;
reachability有三个状态,分别对应注释里面的,(wifi 和3g都是有网络状态)。你的判断是不对的。 --------------------编程问答-------------------- Reachability * wStatus = [Reachability reachabilityWithHostName:@"www.baidu.com"];
if ([wStatus currentReachabilityStatus] == NotReachable) {//这是没有网络 的情况
}else {
}
管他3G wif 2G --------------------编程问答-------------------- -(BOOL)connectedToNetWork
{
struct sockaddr_in zeroAddress;
bzero(&zeroAddress, sizeof(zeroAddress));
zeroAddress.sin_len = sizeof(zeroAddress);
zeroAddress.sin_family = AF_INET;
SCNetworkReachabilityRef defaultRouteReachability = SCNetworkReachabilityCreateWithAddress(NULL, (struct sockaddr *)&zeroAddress);
SCNetworkReachabilityFlags flags;
BOOL didRetrieveFlags = SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags);
CFRelease(defaultRouteReachability);
if (!didRetrieveFlags) {
printf("Error. Count not recover network reachability flags\n");
return NO;
}
BOOL isReachable = flags & kSCNetworkFlagsReachable;
BOOL needsConnection = flags & kSCNetworkFlagsConnectionRequired;
return (isReachable && !needsConnection) ? YES : NO;
}
使用这个方法先检查是否有网络连接,在进行网络类型的判断,另外2G和3G的网络是可以通过Reachability区分出来的
补充:移动开发 , iPhone