【发布时间】:2011-05-04 16:38:12
【问题描述】:
我查看了来自 Apple 的 Reachability 示例和来自“Iphone developer's cook book”的另一个示例
这里是测试 ip/port 可达性的步骤
- 使用给定的 ip/端口构造 sockaddr_in 变量。
- 使用地址调用 SCNetworkReachabilityCreateWithAddress
- 调用 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