2

我使用App Developer Library 中的Reachability来检查互联网连接,代码如下:

+(BOOL)reachable {
Reachability *r = [Reachability reachabilityForInternetConnection];
NetworkStatus internetStatus = [r currentReachabilityStatus];

Reachability *r1 = [Reachability reachabilityForLocalWiFi];
NetworkStatus internetStatus1 = [r1 currentReachabilityStatus];

Reachability *r2 = [Reachability reachabilityWithHostName:FTPURL];
NetworkStatus internetStatus2 = [r2 currentReachabilityStatus];

DLog(@"%d,%d,%d",internetStatus,internetStatus1,internetStatus2);

if(internetStatus != NotReachable && internetStatus1 != NotReachable && internetStatus2 != NotReachable) 
{
    return YES;
}

return NO;

}

如果wifi可用,这三个状态肯定是“Reachable”。如果我手动关闭 wifi(网络连接标志关闭),这三个状态都是“不可访问”。

当我关闭调制解调器时,同时保持无线路由器打开(网络连接标志打开)。虽然我无法访问互联网,但所有三个状态仍然是“可达”。我想知道为什么会发生这种情况以及如何检测这种 UnReachable 状态?

4

1 回答 1

2

就您的 iPhone 而言,非常小的网络(即您的无线 LAN)和 Internet 之间没有区别。它只能说它与 TCP/IP 网络有连接。它无法判断该网络有多大。

如果您想确定是否可以从任何特定 iPhone 访问您的服务器,您必须尝试连接到它。即使那样,它也可能在您测试连接和发送真实数据之间消失。因此,无论您是否在开始之前测试连接,您仍然必须在数据传输期间优雅地处理连接丢失。您最好不要事先检查,只需假设它就在那里并且有很好的代码来处理传输错误。

于 2012-07-05T14:57:35.387 回答