我敢肯定,很少有 iOS 开发人员没有Reachability
直接或通过某些框架(如Alamofire
.
我感兴趣的是它实际上做了什么?我能做出的最好猜测是给定主机它打开套接字然后监听所述主机。但是它使用什么网络协议,它是简单的 UDP(据我观察,它不是 http),它会定期将包发送到所述主机并等待答案吗?
我敢肯定,很少有 iOS 开发人员没有Reachability
直接或通过某些框架(如Alamofire
.
我感兴趣的是它实际上做了什么?我能做出的最好猜测是给定主机它打开套接字然后监听所述主机。但是它使用什么网络协议,它是简单的 UDP(据我观察,它不是 http),它会定期将包发送到所述主机并等待答案吗?
可达性根本不发送任何数据包。它甚至没有告诉您主机实际上是可访问的。它只是告诉您,如果您发出网络请求,则系统将尝试使用一个活动的网络接口。就这样。没有保证这些数据包会到达(更不用说你会得到响应),只是 iOS 会尝试发送它们。
可达性实际上只有几个用途(大多数时候不应该使用)。如果“没有可用的网络”会导致您修改用户界面,或者告诉您现在可能是重试先前失败的连接的好时机,这将很有用。(从 iOS 12开始,你真的应该为此使用NWPathMonitor。我不知道自 iOS 12 以来 Reachability 有什么好的用途。)
您可以知道请求实际上会成功的唯一方法是尝试发送它并查看您是否得到响应。这就是为什么不建议您在发送请求之前测试可达性。如果出现错误,只需发送请求并处理错误,因为总是可能出现错误,即使 Reachability 说您可以连接。