可达性返回不准确状态

Car*_*izz 1 iphone objective-c reachability ios

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

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

我通过添加类似的东西测试它google.com,它工作正常.但是,如果我键入一个垃圾编号8170319837018,并调用此函数,它仍会返回TRUE.但是,如果我向它添加任何字符,就像8170319837018a它应该返回的FALSE那样.我打电话给错了方法Reachability吗?我是否必须检查字符串是URL还是IP地址?

谢谢!

Ale*_*lds 8

可达性有一些问题.如果您连接到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;
}
Run Code Online (Sandbox Code Playgroud)

  • @Carpetfizz,Rechability的主要目的是检查您是否有互联网连接.一旦拥有了,就可以测试SSH或FTP连接. (3认同)