当前位置:编程学习 > wap >>

小白请教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
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,