帮助我了解在使用网络链接调节器测试可达性代码时所看到的内容。这是我的香草可达性代码:
Reachability* wifiReach = [[Reachability reachabilityWithHostName: @"www.apple.com"] retain];
NetworkStatus netStatus = [wifiReach currentReachabilityStatus];
switch (netStatus)
{
case NotReachable:
{
NSLog(@"Access Not Available");
break;
}
case ReachableViaWWAN:
{
NSLog(@"Reachable WWAN");
break;
}
case ReachableViaWiFi:
{
NSLog(@"Reachable WiFi");
break;
}
}
现在,当我使用网络链接调节器使用“100%丢失”预设测试此代码时,netStatus
的值为ReachableViaWWAN
,这是我没想到的。我读了很多关于Reachability没有真正测试连接性的抱怨,而是测试连接的潜力。所以这是我的问题:
“100%丢失”预设是否允许向Apple服务器发出DNS请求,但不允许任何数据包通过?
答案 0 :(得分:2)
这可能与以下事实有关:Reachability不保证数据包实际上可以到达目标主机。它是关于本地网络配置(接口上/下)以及它是否可以发送数据包。
来自Apple的SCNetworkReachability Reference:
当应用程序发送到网络堆栈的数据包可以离开本地设备时,可以认为远程主机是可达的。可达性并不能保证主机实际接收数据包。
因此,如果接口已启动且Reachability可以发送包,则会满足并返回状态可达。
来自Apple的开发人员指南Why Networking is hard:
重要提示:SCNetworkReachability API不用作确定网络连接的预检机制。您可以通过尝试连接来确定网络连接。如果连接失败,请参阅SCNetworkReachability API以帮助诊断故障原因。