首页 文章

当Wi-Fi连接但没有互联网时,可达性不起作用

提问于
浏览
10

我正在使用Apple的可访问性代码,并且在网络可访问性更改时以及启动服务器连接之前设置了两个初始通知 . 当我在wi-fi上时,代码工作,我关闭了Wi-Fi接入点 . 但是,当我使用wi-fi启动应用程序并使用底层宽带连接时,然后一旦应用程序运行,然后断开wi-fi路由器与宽带路由器的连接(即Wi-Fi已打开,但没有互联网连接),我做了一个可达性检查,我得到的网络状态是ReachableViaWiFi . 我已经尝试了reachabilityForInternetConnection和reachabilityWithHostName .

关于Apple的可达性代码是否可用于检测wifi已连接但没有底层网络连接的情况的任何想法?

谢谢!

2 回答

  • 5

    好吧,我找到了答案 - Apple的可达性不测试与主机的实际连接 . 请在下面的SO链接中查看@Zhami的答案:

    How to write a simple Ping method in Cocoa/Objective-C

    基本上,当您首次启动应用程序并执行可访问性检查时,iOS似乎执行DNS查找,如果没有Internet,则检查失败 . 因此,第一次检查可达性时,它实际上返回一个有意义的值 . 但是,如果您在应用程序启动时被捕,并且在一段时间后丢失了互联网连接(虽然仍然连接到WiFi / 3G / 4G但没有底层互联网连接),即使无法访问互联网或指定的主机,也可以进一步访问可达性检查了 .

    因此,如果您想要实时检查连接,请考虑使用以下内容:

    -(BOOL) isConnected
    {
    
        NSString* url = [NSURL URLWithString:@"http://www.google.com/m"];
        ASIHTTPRequest* request = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:url]];
        [request    setTimeOutSeconds:10];
    //customize as per your needs - note this check is synchronous so you dont want to block the main thread for too long
        [request setNumberOfTimesToRetryOnTimeout:0];
        [request startSynchronous];
    
        NSError *error = [request error];
        if (error)
        {
            DLog(@"connectivity error");
            return NO;
        }
        else
        {
            DLog(@"connectivity OK");
            return YES;
        }
    
    }
    
  • 1

    这是一篇非常古老的帖子,但可以留在这里作为参考 . 在reachability示例类中,您可以找到以下代码:

    - (BOOL)startNotifier  
    {  
        BOOL returnValue = NO;
        SCNetworkReachabilityContext context = {0, (__bridge void *)(self), NULL, NULL, NULL};
    
       if (SCNetworkReachabilitySetCallback(_reachabilityRef, ReachabilityCallback, &context))
       {
            if (SCNetworkReachabilityScheduleWithRunLoop(_reachabilityRef, CFRunLoopGetCurrent(), kCFRunLoopDefaultMode))
            {
                returnValue = YES;
            }
       }
    
       return returnValue;
    }
    

    这将使您的_reachabilityRef更新为网络更改 .

相关问题