2

我查看了来自 Apple 的 Reachability 示例和来自“Iphone developer's cook book”的另一个示例

以下是测试 ip/port 可达性的步骤

  1. 用给定的 ip/port 构造 sockaddr_in 变量。
  2. 使用地址调用 SCNetworkReachabilityCreateWithAddress
  3. 调用 SCNetworkReachabilityGetFlags 并查看是否设置了 kSCNetworkFlagsReachable。

我发现无论我测试什么有效(有效范围)ip/port,我的代码都说它是可访问的,即使在我 ping 或 telnet 测试时它们实际上是不可访问的。
(我看过其他 SO 帖子,其中对特定 ip 的可达性测试总是成功) 可达性可达性WithAddress 不起作用

是 SCNetworkReachability.. 调用仅检查参数(IP 地址或主机名)的有效性吗?即,他们是否真的向给定地址发送数据包(或连接)以测试可达性?

我可以自己实现带有超时的异步连接,但是超时不应该被苹果评论者拒绝多长时间是微妙的。(我担心如果时间太长,苹果评论者可能会认为我的应用程序没有处理网络可达性全部)

谢谢

4

1 回答 1

3

根据SCNetworkReachability Reference,根据上述评论回答您的问题

当应用程序发送到网络堆栈的数据包可以离开本地设备时,远程主机被认为是可达的。可达性并不能保证数据包会真正被主机接收。

这将无法检查您的服务器的状态,但只需确保它可以获取数据包。

如果存在任何与网络相关的问题,Apple 希望您的应用程序优雅地失败,第一步是使用可达性检查互联网是否可用。如果可达性失败,您可以假设您无法使用服务器并立即提醒用户。接下来的步骤是正确处理服务器返回的错误,例如 400 错误请求、未找到 404 文件、设置合理的超时时间以及在长时间下载期间不阻塞 UI,同时显示某种状态指示器。

于 2011-05-06T13:11:05.350 回答