Mat*_*ler 8 networking cocoa reachability
帮助我理解使用网络链接调节器测试可达性代码时所看到的内容.这是我的香草可达性代码:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
现在,当我使用网络链接调节器使用"100%损失"预设测试此代码时 - 值netStatus
is ReachableViaWWAN
,这是我没想到的.我读了很多关于Reachability没有真正测试连接性的投诉,而是测试了连接的可能性.所以这是我的问题:
"100%丢失"预设是否允许向Apple服务器发出DNS请求,但不允许任何数据包通过?
这可能与以下事实有关:可达性并不能保证数据包实际上可以到达目标主机。它与本地网络配置(接口打开/关闭)以及是否可以发送数据包有关。
来自 Apple 的SCNetworkReachability 参考:
当应用程序发送到网络堆栈的数据包可以离开本地设备时,远程主机被认为是可达的。可达性并不能保证数据包确实会被主机接收。
因此,如果接口已启动且 Reachability 可以发送数据包,则表示满足并返回状态可达。
来自苹果开发者指南《为什么网络很难》:
重要提示:SCNetworkReachability API 不适合用作确定网络连接的预检机制。您可以通过尝试连接来确定网络连接。如果连接失败,请查阅 SCNetworkReachability API 以帮助诊断失败原因。
归档时间: |
|
查看次数: |
1060 次 |
最近记录: |