iphone网络编程(同步/异步,get/post)

转自:http://blog.sina.com.cn/s/blog_7a2ffd5c0100umh4.html

          http://www.ccbase.net/post/57.html

          http://blog.sina.com.cn/s/blog_8d05143b01015169.html

         http://www.2cto.com/kf/201212/174523.html

         



转自:http://blog.sina.com.cn/s/blog_7a2ffd5c0100umh4.html

最近在做一个微博上的应用,所以熟悉了一下IOS上的网络编程。其实也是蛮简单的。主要的类包括NSURLConnection,NSURLRequest。但首先了解一下异步和同步的这两种连接方式。

     同步:就是程序在执行某一个操作时,一直等待当前操作完成才执行下一操作。

     异步:程序在执行一个操作时,交给另外一个并行的程序来执行,自己继续执行其他的代码,当该操作被完成时,再反馈给主程序。

     我们可以根据不同的情况,选择两种方式。NSURLConnection都可以很好的支持。使用代理方式则为异步,使用sendSynchronousRequest方法则使用同步方式。

     NSURLConnection是用来连接一个URL,并获取反馈信息的类。它提供了很多delegate方法来支持连接过程中的反馈和控制。因此要创建一个NSURLConnection需要一个NSRULRequests。另外如果使用异步方式,还需要实现delegate。

     NSURLRequest类似于HTTP协议中的报头,它表示一次网络请求,并定义了请求的方式(Post/Get),等待时间,缓存规则等。

     NSURLConnection的主要方法包括:

  1.  start:开始下载。默认初始化设定了delegate后便自动开始,但如果没有设定则可以调用此开始 
  2. cancel:在一次请求开始到结束之间调用cancel,会结束当前的请求,并不再接受消息。   

    NSURLConnection的代理方法有:

  1. connection:didReceiveResponse:当接受了足够创建NSURLResponse对象的数据后会调用。
  2. connection:didReceiveData:下载开始后,每当有数据包,都会定期的调用此方法,我们应该在该方法里存储接受到的数据。
  3. connection:didFailWithError:下载过程中有异常,返回失败信息后便不再接收数据
  4. connectionDidFinishLoading:下载顺利完成。
 
   
      实际测试中发现的问题:Get方式可以很好的执行time out,但POST方式却不能相应timeout时间。查阅资料发现Post的最短timeout时间为240秒,如果你setTimeoutInterval小于240,则会被忽略。因此我们只能通过注册自己的Timer,当超过时间后调用cancel。




get请求 vs post请求

转自:http://www.ccbase.net/post/57.html

 一、简单的get请求(异步)

网络编程是我们经常遇到的,在IPhone中,SDK提供了良好的接口,主要使用的类有NSURL,NSMutableURLRequest,NSURLConnection等等。一般情况下建议使用异步接收数据的方式来请求网络连接,这种网络连接分为两步,第一步是新建NSURLConnection对象后,直接调用它的start方法来连接网络。第二步是使用delegate方式来接收数据,这里给一个常用的写法:

网络请求部分:
NSString *urlString = [NSString stringWithFormat:@"http://www.voland.com.cn:8080/weather/weatherServlet?city=%@",kcityID];
NSURL *url = [NSURL URLWithString:urlString];

NSMutableURLRequest *request = [NSMutableURLRequest  requestWithURL:url];
NSURLConnection *aUrlConnection = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:true];
self.urlConnection = aUrlConnection;//这里的urlConnection在头文件中定义的变量
[self.urlConnection start];//开始连接网络
[aUrlConnection release];
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];

接收数据部分,接收到的数据主要是在这里处理
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response  {
NSLog(@"接收完响应:%@",response);
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data  {
NSLog(@"接收完数据:");
}
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error  {
NSLog(@"数据接收错误:%@",error);
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection  {
NSLog(@"连接完成:%@",connection);
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
}
二、Post请求
进行post请求,主要是设置好NSMutableURLRequest对象,在get请求中,我们都使用了默认的,实际这些request内容都可以设置的。设置好后,其它与get方式同:
NSString *content=[[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];
[request setHTTPBody: content];  
[request setHTTPMethod: @"POST"];  
[request setValue:@"Close" forHTTPHeaderField:@"Connection"];  
[request setValue:@"www.voland.com.cn" forHTTPHeaderField:@"Host"];  
[request setValue:[NSString stirngWithFormat@"%d",[content length]] forHTTPHeaderField:@"Content-Length"];




iOS使用NSURLConnection发送同步和异步HTTP Request

转自:http://blog.sina.com.cn/s/blog_8d05143b01015169.html

1.同步发送post

- (NSString*)sendRequestSync
{
   // 初始化请求, 这里是变长的, 方便扩展
   NSMutableURLRequest *request =[[NSMutableURLRequest alloc] init];

   // 设置
   [request setURL:[NSURL URLWithString:urlStr]];
   [request setHTTPMethod:@"POST"];
   [request setValue:host forHTTPHeaderField:@"Host"];
   NSString *contentLength = [NSString stringWithFormat:@"%d", [content length]];
   [request setValue:contentLength forHTTPHeaderField:@"Content-Length"];
   [request setHTTPBody:content];

   // 发送同步请求,data就是返回的数据
   NSError *error =nil;
   NSData *data =[NSURLConnection sendSynchronousRequest:request  returningResponse:nil  error:&error];
   if (data == nil){
       NSLog(@"send requestfailed: %@", error);
      return nil;
   }

   NSString *response =[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
   NSLog(@"response:%@", response);
   returnresponse;
}

2.异步发送post

1) 使用delegate的方式:

-(void)sendRequestAsync
{
    // 初始化请求
   NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];

   // 设置
   [request setURL:[NSURL URLWithString:urlStr]];
   [request setCachePolicy:NSURLRequestUseProtocolCachePolicy ];// 设置缓存策略
   [request setTimeoutInterval:5.0]; //设置超时

   //......

   receivedData = [[NSMutableData alloc] initData: nil];

   NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request     delegate:self];
   if (connection ==nil) {
      // 创建失败
      return;
   }
}

异步发送使用代理的方式,需要实现以下delegate接口:

//收到回应
- (void)connection:(NSURLConnection *)connectiondidReceiveResponse:(NSURLResponse *)response
{   
   NSLog(@"receive the response");
    //注意这里将NSURLResponse对象转换成NSHTTPURLResponse对象才能去
    NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse*)response;
    if ([responserespondsToSelector:@selector(allHeaderFields)]) {
        NSDictionary *dictionary = [httpResponseallHeaderFields];
        NSLog(@"allHeaderFields: %@",dictionary);
    }
    [receivedDatasetLength:0];
}   

// 接收数据  
-(void)connection:(NSURLConnection *)connectiondidReceiveData:(NSData *)data   
{
   NSLog(@"get some data");
   [receivedData appendData:data];   
}

//数据接收完毕
-(void)connectionDidFinishLoading:(NSURLConnection *)connection   
{
   NSString *results = [[NSString alloc]
                          initWithBytes:[receivedData bytes]
                          length:[receivedData length]
                          encoding:NSUTF8StringEncoding];

    NSLog(@"connectionDidFinishLoadi ng: %@",results);
}
 
// 返回错误
-(void)connection:(NSURLConnection *)connectiondidFailWithError:(NSError *)error   
 
   NSLog(@"Connection failed: %@", error );       
}   

2) iOS 5.0版本新增异步发送接口:
+ (void)sendAsynchronousRequest:(NSURLRequest *)request
                          queue:(NSOperationQueue*) queue
              completionHandler:(void (^)(NSURLResponse*,NSData*, NSError*)) handlerNS_AVAILABLE(10_7, 5_0);



IOS之同步请求、异步请求、GET请求、POST请求

转自:http://www.2cto.com/kf/201212/174523.html

1、同步请求可以从因特网请求数据,一旦发送同步请求,程序将停止用户交互,直至服务器返回数据完成,才可以进行下一步操作,

2、异步请求不会阻塞主线程,而会建立一个新的线程来操作,用户发出异步请求后,依然可以对UI进行操作,程序可以继续运行

3、GET请求,将参数直接写在访问路径上。操作简单,不过容易被外界看到,安全性不高,地址最多255字节;

4、POST请求,将参数放到body里面。POST请求操作相对复杂,需要将参数和地址分开,不过安全性高,参数放在body里面,不易被捕获。


1、     同步GET请求

    //第一步,创建URL
    NSURL *url = [NSURL URLWithString:@"http://api.hudong.com/iphonexml.do?type=focus-c"];
   
    //第二步,通过URL创建网络请求
    NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10];
    //NSURLRequest初始化方法第一个参数:请求访问路径,第二个参数:缓存协议,第三个参数:网络请求超时时间(秒)
      其中缓存协议是个枚举类型包含:
      NSURLRequestUseProtocolCachePolicy(基础策略)
      NSURLRequestReloadIgnoringLocalCacheData(忽略本地缓存)
      NSURLRequestReturnCacheDataElseLoad(首先使用缓存,如果没有本地缓存,才从原地址下载
      NSURLRequestReturnCacheDataDontLoad(使用本地缓存,从不下载,如果本地没有缓存,则请求失败,此策略多用于离线操作) www.2cto.com
      NSURLRequestReloadIgnoringLocalAndRemoteCacheData(无视任何缓存策略,无论是本地的还是远程的,总是从原地址重新下载)
      NSURLRequestReloadRevalidatingCacheData(如果本地缓存是有效的则不下载,其他任何情况都从原地址重新下载)
    //第三步,连接服务器
    NSData *received = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
   
    NSString *str = [[NSString alloc] initWithData:received encoding:NSUTF8StringEncoding];
   
    NSLog(@"%@",str);


2、同步POST请求
    //第一步,创建URL
    NSURL *url = [NSURL URLWithString:@"http://api.hudong.com/iphonexml.do"];
    //第二步,创建请求
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc]initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10];
    [request setHTTPMethod:@"POST"];//设置请求方式为POST,默认为GET
    NSString *str = @"type=focus-c";//设置参数
    NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];
    [request setHTTPBody:data];
    //第三步,连接服务器
   
    NSData *received = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
   
    NSString *str1 = [[NSString alloc] initWithData:received encoding:NSUTF8StringEncoding];
   
    NSLog(@"%@",str1);

3、异步GET请求
    //第一步,创建url
    NSURL *url = [NSURL URLWithString:@"http://api.hudong.com/iphonexml.do?type=focus-c"];
    //第二步,创建请求
    NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10];
    //第三步,连接服务器
    NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];

4、异步POST请求
    //第一步,创建url
    NSURL *url = [NSURL URLWithString:@"http://api.hudong.com/iphonexml.do"];
    //第二步,创建请求
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10];
    [request setHTTPMethod:@"POST"];
    NSString *str = @"type=focus-c";
    NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];
    [request setHTTPBody:data];
    //第三步,连接服务器
    NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];


5、异步请求的代理方法
//接收到服务器回应的时候调用此方法
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
    NSHTTPURLResponse *res = (NSHTTPURLResponse *)response;
    NSLog(@"%@",[res allHeaderFields]);
    self.receiveData = [NSMutableData data];
 

                             
}
//接收到服务器传输数据的时候调用,此方法根据数据大小执行若干次
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    [self.receiveData appendData:data];
}
//数据传完之后调用此方法
-(void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    NSString *receiveStr = [[NSString alloc]initWithData:self.receiveData encoding:NSUTF8StringEncoding];
    NSLog(@"%@",receiveStr);
}
//网络请求过程中,出现任何错误(断网,连接超时等)会进入此方法
-(void)connection:(NSURLConnection *)connection
 didFailWithError:(NSError *)error
{
    NSLog(@"%@",[error localizedDescription]);
}




  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
未来社区的建设背景和需求分析指出,随着智能经济、大数据、人工智能、物联网、区块链、云计算等技术的发展,社区服务正朝着数字化、智能化转型。社区服务渠道由分散向统一融合转变,服务内容由通用庞杂向个性化、服务导向转变。未来社区将构建数字化生态,实现数据在线、组织在线、服务在线、产品智能和决策智能,赋能企业创新,同时注重人才培养和科研平台建设。 规划设计方面,未来社区将基于居民需求,打造以服务为中心的社区管理模式。通过统一的服务平台和应用,实现服务内容的整合和优化,提供灵活多样的服务方式,如推送式、订阅式、热点式等。社区将构建数据与应用的良性循环,提高服务效率,同时注重生态优美、绿色低碳、社会和谐,以实现幸福民生和产业发展。 建设运营上,未来社区强调科学规划、以人为本,创新引领、重点突破,统筹推进、整体提升。通过实施院落+社团自治工程,转变政府职能,深化社区自治法制化、信息化,解决社区治理中的重点问题。目标是培养有活力的社会组织,提高社区居民参与度和满意度,实现社区治理服务的制度机制创新。 未来社区的数字化解决方案包括信息发布系统、服务系统和管理系统。信息发布系统涵盖公共服务类和社会化服务类信息,提供政策宣传、家政服务、健康医疗咨询等功能。服务系统功能需求包括办事指南、公共服务、社区工作参与互动等,旨在提高社区服务能力。管理系统功能需求则涉及院落管理、社团管理、社工队伍管理等,以实现社区治理的现代化。 最后,未来社区建设注重整合政府、社会组织、企业等多方资源,以提高社区服务的效率和质量。通过建立社区管理服务综合信息平台,提供社区公共服务、社区社会组织管理服务和社区便民服务,实现管理精简、高效、透明,服务快速、便捷。同时,通过培育和发展社区协会、社团等组织,激发社会化组织活力,为居民提供综合性的咨询和服务,促进社区的和谐发展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值