iOS - 具有Reachability类的连接检查程序失败。 (reachabilityWithHostName :)

时间:2014-03-14 11:11:19

标签: ios reachability internet-connection

我使用Apple的Reachability类'reachabilityWithHostName:方法编写了一个连接检查器。这是我的代码。

-(BOOL)checkConnection{
Reachability *reachability = [Reachability reachabilityWithHostName:@"www.example.com"];
NetworkStatus remoteHostStatus = [reachability currentReachabilityStatus];
if (remoteHostStatus != NotReachable) {
    return YES;
}
else {return NO;}
}

这是用例:

  • 如果我有wifi连接**:按预期返回YES。
  • 如果我有蜂窝连接:按预期返回YES。
  • 如果禁用手机和Wifi:按预期返回NO。
  • 如果我有WiFi连接;但DSL电缆已拔掉(因此主机不应该 可以访问,互联网连接不可用。):返回YES,这是意外的。
  • 此外,如果启用了手机,但在我当前的位置,我没有信号:返回YES,这是意外的。

如何解决这些意外结果? 谢谢。

1 个答案:

答案 0 :(得分:0)

在@Martin Koles的帮助下,我在服务器中添加了一个html文件。它里面只有一个随机值。现在我检查可达性。如果服务器可以访问,我试图从html文件中获取值。比,如果我能得到返回YES的值。如果我不能(serverValue应该为nil)返回NO ..

-(BOOL)checkConnection{
Reachability *reachability = [Reachability reachabilityWithHostName:@"www.izmirmobil.com"];
NetworkStatus remoteHostStatus = [reachability currentReachabilityStatus];
if (remoteHostStatus != NotReachable) {
    NSURL *url = [NSURL URLWithString:@"http://www.example.com/getAValue.html"];
    NSError *errr = nil;
    NSStringEncoding enc;
    NSString *serverValue = [[NSString alloc] initWithContentsOfURL:url usedEncoding:&enc error:&errr];
    if(serverValue)return YES;
    else return NO;

}
else {return NO;}
}