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

时间:2011-05-04 16:38:12

标签: iphone networking reachability

我看过苹果的Reachability样本和“Iphone开发者的烹饪书”中的另一个样本

以下是测试ip / port reachability的步骤

  1. 使用给定的ip / port构造sockaddr_in变量。
  2. 使用地址
  3. 调用SCNetworkReachabilityCreateWithAddress
  4. 调用SCNetworkReachabilityGetFlags并查看是否设置了kSCNetworkFlagsReachable。
  5. 我发现无论我测试的有效(有效范围)ip /端口是什么,我的代码都说它可以访问,即使我在ping或telnet测试时实际上无法访问它们。
    (我看过其他SO帖子,其中对特定ip的可达性测试总是成功) Reachability reachabilityWithAddress does not work

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

    我可以自己实现异步连接和超时,但是苹果评论员不应该拒绝多长时间这是微妙的事情。(我担心如果需要太长时间,苹果评论家可能认为我的应用程序没有处理网络可达性)

    谢谢

1 个答案:

答案 0 :(得分:2)

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

  

远程主机被视为可访问   当一个数据包,由一个   应用程序进入网络堆栈,   可以离开本地设备。   可达性并不能保证   数据包实际上是   收到主持人的回复。

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

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