iphone - (iphone) 特定 IP/端口的可达性测试?

标签 iphone networking reachability

我查看了苹果的可达性示例和“Iphone 开发人员食谱”中的另一个示例

以下是测试 IP/端口可达性的步骤

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

我发现无论我测试什么有效(有效范围)IP/端口,我的代码都表示它是可访问的,即使在我 ping 或 telnet 测试时它们实际上无法访问。
(我看过其他 SO 帖子,其中对特定 ip 的可达性测试总是成功) Reachability reachabilityWithAddress does not work

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

我可以自己实现带有超时的异步连接,但是超时应该多长时间才不会被苹果审阅者拒绝,这是一个微妙的问题。(我担心如果需要太长时间,苹果审阅者可能会认为我的应用程序没有处理网络可达性)

谢谢

最佳答案

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

A remote host is considered reachable when a data packet, sent by an application into the network stack, can leave the local device. Reachability does not guarantee that the data packet will actually be received by the host.

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

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

关于iphone - (iphone) 特定 IP/端口的可达性测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5886788/

相关文章:

iPhone 5 TabBar 无法在正确的位置运行

iphone - 应用程序设计 - iPhone 和 Cocoa 应用程序之间的区别?

java - 我在哪里可以找到 SolarFlare OpenOnLoad Kernel Bypass 的一些示例 Java 代码?

ios - 同时调用 ViewController 的多个实例导致应用程序在 AppDelegate 中崩溃

ios - 支持 IPv6-only 网络应该注意什么?

iphone - 调用 reloadRowsAtIndexPaths 删除 tableView contentOffset

iphone - 是否可以通过互联网在两个移动设备(iPhone)之间连接一个套接字?

c - 在 TCP 上手动选择一个接口(interface)来发送数据

networking - Terraformed 私有(private) GKE 集群自动化访问

objective-c - 从未调用可达性通知