下面,网络时空(阿堂)就以下图示中的demo来说明整个流程
当我们点登录时,就会由IPHONE 发通讯请求到web server端,WEB SERVER 端收到请求后,会对请求进行分析处理后,封装相应的业务数据反馈给IPHONE 客户端,客户端得到反馈的信息后,若正常就会跳到如下正常的业务界面,进行后续的操作了;若不正常,则会弹出相应的信息窗口显示显示给当前操作者。(不正常的弹出信息窗口,我这里不截图说明了) iphone客户端和服务端交互一般来说,有三种方式可以实现。 一. 方式1. 是ios自带的api中的通讯方式 定义一个请求:
NSMutableURLRequest* urlRequest = [[NSMutableURLRequest alloc]initWithURL:url
cachePolicy:NSURLRequestReloadIgnori timeoutInterval:NETWORK_TIMEOUT]; url参数就是一个http地址 NSMutableURLRequest有诸如setHTTPMethod、setValue、setHTTPBody之类的方法
发送一个请求:
NSURLConnection* connection = [[NSURLConnection alloc] initWithRequest:urlRequest delegate:self];
[connection start];
connection的delegate负责服务器端返回数据的接收,这个delegate(NSURLConnectionDataDeleg
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response;
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data;
-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error;
(以上方法的使用,比较简单,阿堂就不再特别说明了,看看下面的ASIHTTPREQUEST 的实现方式就很好理解了,也可以从XCODE 的帮助文档中去查看)
二. 方式2 和方式3(采用 ASIHTTPREQUEST 的方式) 要想使用 asihttprequest的开源库,前提是要导入如下的开源库文件和对应的 lib文件,如下 方式2:采用 get方式 /* Get 提交方式 方式3:采用post方式(这是阿堂推荐的一种最好方式) 以下重要信息,根据实际情况,要进行加密后处理,为了不增加说明的复杂性,阿堂下面就没有相应处理了,这不是今天讨论的重点,请网友在使用时自行处理了。(可采用base64等方式去加密和解密) // Post提交方式
NSURL *url = [NSURL URLWithString:@"http://www./zzgame/ProcesLogin"]; m_Request = [[ASIFormDataRequest alloc] initWithURL:url]; NSMutableDictionary *postData = [[NSMutableDictionary alloc] initWithCapacity:2]; NSMutableDictionary *data = [[NSMutableDictionary alloc] initWithCapacity:5]; [data setObject:@"login" forKey:@"param"]; [data setObject:userName1 forKey:@"userName"]; [data setObject:passWord1 forKey:@"passWord"]; [postData setValue:data forKey:@"data"]; NSString *jsonString = [postData JSONRepresentation]; [m_Request setDelegate:self]; [m_Request setPostValue:jsonString forKey:@"p_data"]; [m_Request setTimeOutSeconds:120]; [m_Request startAsynchronous]; //异步执行 交互时步骤如下
1.请先定义如下两个变量
NSMutableData *recData;
ASIFormDataRequest *m_Request; 2.实现如下协议
@interface LoginViewController : UIViewController
<ASIHTTPRequestDelegate> 3.实现如下四个代理方法
- (void)requestStarted:(ASIHTTPRequest
*)request{
self.recData.length = 0; } - (void)requestFinished:(ASIHTTPRequest
*)request{
NSStringEncoding enc = CFStringConvertEncodingT NSString *aString = [[NSString alloc]initWithData:self.recData encoding:enc]; if ([aString isEqualToString:@"YES"]) { //这里写上自己实际的代码 }else{ //弹出错误信息的弹出窗口
} } - (void)requestFailed:(ASIHTTPRequest
*)request{
NSError *error =[request error]; NSDictionary * userInfoDirectionary = error.userInfo; NSString *content = [userInfoDirectionary objectForKey:@"NSLocalizedDescription"]; if ([content isEqualToString:@"The request timed out"]) { //写上自己的实际代码 }else if([content isEqualToString:@"Unable to create request (bad url?)"]){ //写上自己的实际代码 } else{ //写上自己的实际代码 } } - (void)request:(ASIHTTPRequest
*)request didReceiveData:(NSData *)data{
[self.recData appendData:data]; } |
|
来自: instl > 《android-ios》