网络传输的错误类型

错误类型
  • 操作系统错误  通常由HTTP服务器引起
  • HTTP 错误     通常由HTTP服务器或应用服务器引起
  • 应用错误        通常由请求中的数据传输或应用服务器问题引起
NSError

用NSError来表示错误对象,它拥有如下属性:

  • code         NSInteger对象,标明发生了哪个错误。
  • Domain     标明错误是谁产生的。
  • User Info   NSDictionary对象
OS ERROR
由以下错误引起:
  • 没有联网
  • 无法连接到指定主机
  • 无应用监听指定端口
  • 无法解析指定主机名
解决办法:
在每一次call之前,用Reachability检查网络的可到达性,检测1.设备是否有可用的网络连接,2.该网络下指定主机是否可达到,3.判断是哪种网络:Wi-Fi,W WAN 还是都都不是,4.提示网络状态的所有改变。
NetworkStatus reach = [[Reachability reachabilityForInternetConnection] currentReachabilityStatus];

1.检查网络连接是否存在:
reach == NotReachable不存在

2.检查指定主机是否可以被访问,如果用于每个请求,会显著增加网络开销和延迟,所以不建议在主线程调用,否则有可能会阻塞主线程。
Reachability *reach = [Reachability reachabilityWithHostName:@"www.captechconsulting.com"];

3.检查网络类型
reach == ReachableViaWWAN  // Network Is reachable via WWAN (aka. carrier network)
reach == ReachableViaWiFi  // Network is reachable via WiFi

4.提示网络状态改变

Reachability *reachability = [Reachability reachabilityForInternetConnection];
[reachability startNotifier];       // kReachabilityChangedNotification

HTTP Error
由以下问题引起:
HTTP请求, HTTP服务器或应用程序服务器造成。 
HTTP错误通过HTTP响应中的状态码传送给发出请求的客户端。404状态是一个常见的例子,表明在URL中指定的资源找不到。


有五类HTTP错误:
Informational 100-level - 表示该请求的处理将继续,但有一个警告。
Successful 200-level - 每个200-level状态表示请求成功的不同的结果。204表示请求成功,但是没有payload返回到客户端。
Redirection needed 300-level - 指出客户端必须执行一些行动来继续请求,因为所需的资源已经被移动。
Client Errors 400-level - 表示客户端发送错误数据,服务器不能正确处理。
Downstream errors 500-level - 表示HTTP服务器和任何下游应用服务器之间发生了错误。
NSHTTPURLResponse *response=nil; 
NSError *error=nil; 
NSData *myData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
[response statusCode]; //就是状态码

Application Errors

这个是程序自己在逻辑上设定的,比如:在余额为100的支付宝试图转走200块。

如何处理错误
  • Interface Contract中包含错误处理
  • 特别处理移动网络下的错误状态
  • 确认payload是否有效(JSON和XML有确认机制,但是CSV和HTML没有)
  • 区分网络错误和正常的业务情况
  • 检查HTTP状态(Always
  • 检查NSError(Always
  • 设计一个统一的方式来处理错误
  • 设置一个合理的超时值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值