iOS网络高级编程—网络功能(错误处理)

在iOS加载系统与服务器通讯时可能会发生一些不可预知的错误。

这些错误大致可分为三类:

  • 操作系统错误(OS错误)
  • HTTP错误
  • 应用错误
    如下图详细解释了错误源:


URL加载系统错误源

下面将解析下这三类错误。

1. 操作系统错误

一般是指App发送请求开始,到HTTP服务器这一过程中发生的数据传输错误。

造成OS错误可能有以下原因:

  • 没有网络。(可通过Apple提供的Reachability检测)
  • 无法路由到目标主机。可能有网络连接,但是连接的目标可能位于隔离的网络中或处于离线状态,也可能连接超时。
  • 没有应用监听目标端口。请求发送到目标主机后,如果服务器没有监听这个端口或者有太多的连接在这个端口请求排队,连接也可能失败。
  • 无法解析目标主机名。一般是网络的DNS解析有问题。
    iOS的URL加载系统中有一个重要的类进行了error的高度抽象化。它就是NSError。一般情况下OS错误会以NSError对象的形式传递给程序。

NSError有如下3个主要属性:

  • code。标识错误的NSInteger值。
  • domain。错误域的NSString指针。(来自NSURLErrorDomain域)
  • userInfo。详细错误的NSDictionary。

网络连接状态的检查

一个可最大程度避免OS错误的操作是进行网络连接的状态检查。大都由SystemConfiguration框架提供,集成于SCNetworkReachability中,但是应用层一般不能直接调用。而且幸运的是Apple提供了一个Reachability示例程序。是一个简化的、高层的SCNetworkReachability封装器。链接-》Reachability Sample Code

需要注意的是,用Reachability对网络进行检查时默认是在主线程进行的。这样可能会造成UI的阻塞。

2. HTTP错误

HTTP错误是在HTTP服务器与应用服务器通讯间发生的错误。一般可能是HTTP请求、HTTP服务器或应用服务的问题造成。在错误发生后,会通过HTTP状态码发送给请求端。

HTTP共有5类错误:

  1. 100级。请求会继续,但是会带有警告。
  2. 200级。请求成功。
  3. 300级。需要重定向。必须执行某个动作才能继续请求,因为所需资源移动了。
  4. 400级。客户端错误。客户端发出了服务器无法正确处理的错误数据。
  5. 500级。HTTP服务器与下游应用服务器出现错误。
    更详细信息可查询W3官网协议-》W3 RFC 2616

3. 应用错误

一般是代码问题造成的。


over