【问题标题】:Reachability returning inaccurate status可达性返回不准确的状态
【发布时间】:2014-01-02 21:53:34
【问题描述】:

我有一个简单的Reachability 代码,如果我可以连接到服务器,它会返回:

-(BOOL)checkConnectionForHost:(NSString*)host{
   _checkStatus = [Reachability reachabilityWithHostname:host];
   NetworkStatus networkStatus = [_checkStatus currentReachabilityStatus];
   return networkStatus != NotReachable;
}

我通过添加google.com 之类的内容对其进行了测试,它运行良好。但是,如果我输入像8170319837018 这样的垃圾号码,然后调用这个函数,它仍然会返回TRUE。但是,如果我向它添加任何字符,例如8170319837018a,它将返回FALSE,它应该如此。我在Reachability 上调用了错误的方法吗?我必须检查字符串是 URL 还是 IP 地址?

谢谢!

【问题讨论】:

    标签: ios iphone objective-c reachability


    【解决方案1】:

    可达性存在一些问题。如果您连接到 wifi,它将返回它是可充电的,但实际上不会 ping 主机。更好的方法是使用NSURLCONNECTION 直接ping 服务器

    + (BOOL)pingURL:(NSString *)url
    {
        NSURLRequest *request = [[NSURLRequest alloc] initWithURL:[NSURL URLWithString:url] cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:1];
        NSURLResponse *response = nil;
        NSError *error = nil;
        [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
        NSLog(@"response %d", [(NSHTTPURLResponse *)response statusCode]);
        if ([(NSHTTPURLResponse *)response statusCode] == 200) {
            return YES;
        }
    
        return NO;
    }
    

    【讨论】:

    • 谢谢!这也适用于地址吗?另外,如果我尝试 ping 非 HTTP 端口怎么办?
    • 谢谢,但您的示例仅处理 HTTP 请求/响应。如果我想 ping 一个 FTP 或 SSH 协议怎么办? statusCodes等会不会不一样?
    • @Carpetfizz ,Rechability 的主要目的是检查您是否有互联网连接。一旦你有了它,你就可以测试 SSH 或 FTP 连接了。
    • @doNotCheckMyBlog,谢谢,我可以用 NSURLRequest 做到这一点吗?
    【解决方案2】:

    我认为这是因为内部可达性标志是长数字。因此,当您传递 8170319837018 时,[_checkStatus currentReachabilityStatus] 必须返回一些不等于 NotReachable(0) 的数字,这就是它必须返回 TRUE 的原因。您可以做的是检查每种类型的可达性,如下所示:

    -(BOOL)checkConnectionForHost:(NSString*)host{
       _checkStatus = [Reachability reachabilityWithHostname:host];
       NetworkStatus networkStatus = [_checkStatus currentReachabilityStatus];
       return (networkStatus == ReachableViaWiFi) || (networkStatus == ReachableViaWWAN);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-21
      • 1970-01-01
      • 2019-12-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多