开源中国iOS客户端学习——(五)网络通信ASI类库(1)

---------------------------------------------------------------------------------------------------------------------------

2015.8.19 更新

考虑到还会有很多童鞋会看到该Blog,在此做一个说明,开源中国iOS开源客户端源码已做重构,请下载最新的源码学习(注:本Blog不一定适用与新的代码学习)。

新repo地址:http://git.oschina.net/oschina/iphone-app

另外,这篇Blog收集了一些其他社区的客户端源码,源码也正在不断更新中,有的也上架appstore。

访问地址:http://duxinfeng.com/2015/07/14/iOS%E5%BC%80%E6%BA%90App%E6%95%B4%E7%90%86/

---------------------------------------------------------------------------------------------------------------------------

如今的应用大部分基予网络,在开源中国iOS客户端源码中关于网络通信方面用了三个类库,ASI和AFNetworking,还有一个苹果官方给出的Reachability用于检测当前网络状况,本文介绍当前用的比较多的ASI类库;


ASIHTTPRequest简称ASI,它是对CFNetwork API进行封装,使在与web服务器通信时的繁琐步骤变得容易一些。它是使用Objective-C 编写,能够很好的用在Mac OS X和iPhone应用程序中;它适用于执行基本的HTTP请求和交互基于 REST的服务(GET / POST / PUT /DELETE)互交。

ASIHTTPRequest下载 https://github.com/pokeb/asi-http-request/tree

关于ASI类库介绍在  http://allseeing-i.com/ASIHTTPRequest/

添加ASI到你工程中步骤 http://allseeing-i.com/ASIHTTPRequest/Setup-instructions


ASI特点

l通过简单的接口,即可完成向服务端提交数据和从服务端获取数据的工作 

l下载的数据,可存储到内存中或直接存储到磁盘中 

l能上传本地文件到服务端 

l可以方便的访问和操作请求和返回的Http头信息 

l可以获取到上传或下载的进度信息,为应用程序提供更好的体验 

l支持上传或下载队列,并且可获取队列的进度信息 

l支持基本、摘要和NTLM身份认证,在同一会话中授权凭证会自动维持,并且可以存储在KeychainMaciOS操作    系统的密码管理系统)中 

l 支持Cookie 

l当应用(iOS4+)在后台运行时,请求可以继续运行 

l 支持GZIP压缩数据 

l内置的ASIDownloadCache类,可以缓存请求返回的数据,这样即使没有网络也可以返回已经缓存的数据结果 

l ASIWebPageRequest –可以下载完整的网页,包括包含的网页、样式表、脚本等资源文件,并显示在UIWebView  /WebView中。任意大小的页面都可以无限期缓存,这样即使没有网络也可以离线浏览 

l支持客户端证书 

l支持通过代理发起Http请求 

l支持带宽限制。在iOS平台,可以根据当前网络情况来自动决定是否限制带宽,例如当使  用WWAN(GPRS/Edge/3G)网络时限制,而当使用WIFI时不做任何限制 

l支持断点续传 

l支持同步和异步请



ASI类库里包括22个文件,4个主要的类ASIHTTPRequest 、ASIFormDataRequest、ASINetworkQueue、ASIDownloadCache,5个支持的类ASIInputStream、ASIDataDecompressor、ASIDataCompressor、ASIAuthenticationDialog、Reachability,4个协议配置文件ASIHTTPRequestDelegate、ASIProgressDelegate、ASICacheDelegate、ASIHTTPRequestConfig.h,这些文件作用在开发文档中都有详细介绍.


http://allseeing-i.com/ASIHTTPRequest/How-to-use有关于初次接触ASI的简单使用,很有必要看一看,

了解简单的同步请求、异步请求,block块请求,队列请求等其他用法。


用ASI写的一个简单请求数据的Demo:

测试使用的URL是国家气象局API,返回一个json数据

#define URL @"http://www.weather.com.cn/data/sk/101010100.html"


请求得到数据:



//同步请求
- (IBAction)synchronization_bt:(id)sender {
    
    NSURL *url = [NSURL URLWithString:URL];
    ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
//    启动同步方式访问
    [request startSynchronous];
    
    NSError *error = [request error];
//    请求成功
    if (!error) {
        NSString *response = [request responseString];
        NSLog(@"请求数据:%@",response); 
    }
    }
    
}

//异步请求
- (IBAction)asynchronous_bt:(id)sender {
    NSURL *url = [NSURL URLWithString:URL];
    ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
    [request setDelegate:self];
//    启动异步方式访问
    [request startAsynchronous];
}


//异步请求Delegate Methods
-(void)requestFinished:(ASIHTTPRequest *)request
{
    NSString *responseString = [request responseString];
    NSLog(@"请求的String数据:%@",responseString);
//   以 二进制文件形式存储
    NSData *responseData = [request responseData];
    NSLog(@"请求的Data数据:%@",responseData);
    
}
-(void)requestFailed:(ASIHTTPRequest *)request
{
    NSError *error = [request error];
    NSLog(@"Error:%@",error.userInfo);

}

//block块请求
- (IBAction)blocks_tn:(id)sender {
    NSURL *url = [NSURL URLWithString:URL];
    __block ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
    [request setCompletionBlock:^{
        NSString *responseString = [request responseString];
        NSLog(@"请求的String数据:%@",responseString);
        
    }];
    [request setFailedBlock:^{
        NSError *error = [request error];
         NSLog(@"Error:%@",error.userInfo);
    }];
    [request startAsynchronous];
}

//队列请求
- (IBAction)queue_bt:(id)sender {
    
    if (![self queue]) {
        [self setQueue:[[[NSOperationQueue alloc]init]autorelease]];
    }
    NSURL *url = [NSURL URLWithString:URL];
    ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
    [request setDelegate:self];
    [request setDidFinishSelector:@selector(requestDone:)];
    [request setDidFailSelector:@selector(requestWentWrong:)];
    [[self queue] addOperation:request];
}

-(void)requestDone:(ASIHTTPRequest *)request
{
    NSString *response = [request responseString];
    NSLog(@"请求的数据:%@",response);
}

-(void)requestWentWrong:(ASIHTTPRequest *)request
{
    NSError *error = [request error];
    NSLog(@"Error:%@",error.userInfo);
}

将类库加入到工程中不要忘了添加支持的framework框架和库:

SystemConfiguration.framework, MobileCoreServices.framework, CoreGraphics.framework 和 libz.dylib.


源代码:http://download.csdn.net/detail/duxinfeng2010/4947729



ASIHTTPRequest中文文档:





正在学习过程中,错误之处请指正,欢迎交流,共同学习;

欢迎转载分享,请注明出处http://blog.csdn.net/duxinfeng2010




  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
大众汽车RSI、ASI和BAP通信协议是大众汽车公司用于车辆电子控制单元(ECU)之间进行通信的协议。下面是对这三种协议的概述: 1. RSI(Remote Service Interface)远程服务接口协议: RSI是大众汽车公司开发的一种用于车辆诊断和编程的通信协议。它提供了一种标准化的方式,使得诊断工具可以与车辆的ECU进行通信,并进行故障诊断、参数设置和编程等操作。RSI协议支持多种物理层接口,如CAN(Controller Area Network)和Ethernet等。 2. ASI(Automotive System Interface)汽车系统接口协议: ASI是大众汽车公司用于车辆内部ECU之间进行通信的协议。它定义了一套标准的消息格式和通信规则,使得不同的ECU可以通过ASI协议进行数据交换和协同工作。ASI协议支持多种物理层接口,如CAN和LIN(Local Interconnect Network)等。 3. BAP(Bus Access Protocol)总线访问协议: BAP是大众汽车公司用于车辆网络总线上的ECU之间进行通信的协议。它规定了在总线上进行数据传输的方式和规则,包括消息的发送和接收、帧格式、错误检测等。BAP协议通常用于大众汽车的专有总线系统,如K-Line和MOST(Media Oriented Systems Transport)等。 这些通信协议在大众汽车的车辆电子系统中起到了关键的作用,使得不同的ECU可以进行有效的数据交换和协同工作,从而实现车辆的各种功能和服务。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值