如何确定Intranet上的可访问性(iOS)

时间:2013-10-17 16:16:04

标签: iphone ios ipad

我偶尔使用AFNetworking和Reachability,但它一直用于检查互联网连接。如何判断iOS设备是否连接到没有互联网连接的WLAN?

我必须能够实时了解可达性状态。

*只是澄清一下:

我不想检查互联网是否可以访问。 我想检查一下设备是否连接到WLAN。

*将LAN更改为WLAN以澄清

3 个答案:

答案 0 :(得分:1)

可达性处理与两种类型的网络连接,WWans(小区连接)和WiFi的连接。我猜你在谈论通过WiFi连接。

尝试这样的事情:

-(BOOL)isWifiRouterConnected
{
    BOOL returnValue = NO;
    //test for a wifi connection
    Reachability *wifiReachability = [Reachability reachabilityForLocalWiFi];
    BOOL wifiReachable = [wifiReachability isReachableViaWiFi];

    //test for connection to google
    if( wifiReachable )
    {
        returnValue = [Reachability reachabilityWithHostname:@"google.com"];
    }
    return returnValue;
 }

答案 1 :(得分:1)

每个人都使用的标准Reachability类非常具有欺骗性。它尝试仅通过猜测来确定主机是否可访问。例如,如果您想知道您目前是否能够访问www.google.com,并且致电[Reachability reachabilityWithHostname:@"www.google.com"];,则该应用永远不会“触摸”服务器以确保其已开启,关联或响应。

Reachability实际上大致如下所示:

  1. 使用当前的DNS配置查找IP地址。如果无法解析DNS,则无法访问主机。
  2. 查看所有已知网络连接的当前状态。如果它们全部关闭,主机将无法访问。
  3. 对于每个网络适配器,确定目标IP是否在本地子网上。如果是,请将其报告为可达。
  4. 对于每个网络适配器,确定目标IP是否存在路由路径。通常,这只会查看默认网关。如果存在目标IP的路径,请将其报告为可达。
  5. 如果一切都失败了,则无法访问主机。
  6. 您遇到的问题是,如果您使用的是WiFi,但用户尚未同意条款和条件,这在星巴克很常见,目标仍然会被报告为可以访问。

    测试网络连接的唯一真正方法是下载内容。例如,我经常在服务器上看到Ping / Pong功能和心跳文件,仅用于此目的。在这个庄园中,您不仅可以测试您的Internet,还可以测试服务器是否按预期运行。

答案 2 :(得分:-1)

查看Network Apps for iPhone OS, Part 1Part 2

请勿使用可访问性预检您的连接,只需触发您的请求。

如果您坚持使用Reachability来测试您的连接,请发起请求,使用Jonah描述的方法并使用您的内部可访问主机名进行测试。

例如:

    // ... 
    if (wifiReachable) {
        returnValue = [Reachability reachabilityWithHostname:@"internalserver.example.com"];
    }
    return returnValue;
}