我偶尔使用AFNetworking和Reachability,但它一直用于检查互联网连接。如何判断iOS设备是否连接到没有互联网连接的WLAN?
我必须能够实时了解可达性状态。
*只是澄清一下:
我不想检查互联网是否可以访问。 我想检查一下设备是否连接到WLAN。
*将LAN更改为WLAN以澄清
答案 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实际上大致如下所示:
您遇到的问题是,如果您使用的是WiFi,但用户尚未同意条款和条件,这在星巴克很常见,目标仍然会被报告为可以访问。
测试网络连接的唯一真正方法是下载内容。例如,我经常在服务器上看到Ping / Pong功能和心跳文件,仅用于此目的。在这个庄园中,您不仅可以测试您的Internet,还可以测试服务器是否按预期运行。
答案 2 :(得分:-1)
查看Network Apps for iPhone OS, Part 1和Part 2。
请勿使用可访问性预检您的连接,只需触发您的请求。
如果您坚持使用Reachability来测试您的连接,请发起请求,使用Jonah描述的方法并使用您的内部可访问主机名进行测试。
例如:
// ...
if (wifiReachable) {
returnValue = [Reachability reachabilityWithHostname:@"internalserver.example.com"];
}
return returnValue;
}