【问题标题】:(iphone) reachability test for specific ip/port?(iphone) 特定 IP/端口的可达性测试?
【发布时间】:2011-05-04 16:38:12
【问题描述】:

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

这里是测试 ip/port 可达性的步骤

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

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

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

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

谢谢

【问题讨论】:

  • stackoverflow.com/questions/5874445/… 可达性不会帮助你。
  • @joe:啊,谢谢,“能够离开本地设备”是什么意思?我猜这是一个网络问题。这是否意味着ip被路由到其他计算机但不知道它是否会成功到达该地址? (因为本地路由表可能没有足够的任意 IP 地址的路由信息​​,并且会转发到我怀疑的其他主机)
  • @joe:苹果不会因为没有检测到主机的启动/关闭而拒绝应用程序?只是验证互联网连接正常吗?
  • Apple 希望您的应用程序在出现任何网络相关问题时优雅地失败,检查互联网是否可用是第一步,下一步是正确处理服务器返回的错误(即400, 404 http状态码,设置合适的超时)

标签: iphone networking reachability


【解决方案1】:

根据上面的cmets回答你的问题,根据SCNetworkReachability Reference

远程主机被认为是可达的 当一个数据包,由一个发送 应用到网络堆栈中, 可以离开本地设备。 可达性并不能保证 数据包实际上是 主机收到。

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

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

【讨论】:

  • 那么,可达性不好命名。这具有误导性……可访问性对主机名的检查对我来说意味着 iphone 可以 ping 我选择的主机并查看该主机是否回复。因此,所有可访问性都以编程方式反映您的 wifi 图标或 4G 图标是否显示在屏幕上(减去 GUI 图标不反映真实底层网络状态的时间)。可达性意味着 iPhone 在线,并准备好采取行动。而已。它不能帮助您找出您公司的服务器出现故障的情况,而像 google.com 这样的 24-7 站点却在运行。对吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-11-20
  • 2011-08-29
  • 1970-01-01
  • 2012-06-15
  • 1970-01-01
  • 2018-05-09
  • 1970-01-01
相关资源
最近更新 更多