iPhone应用用HTTP协议和服务器通信是本文要介绍的内容,主要是来学习iphone应用中的通信协议,具体内容来看本文详解。

iPhone用http协议和服务器通信有两种方式,一种是同步一种是异步的,所谓同步是指当客户端调用post/get的方式的函数向服务器发出数据请求后,该函数不会直接返回,只有得到服务器响应或者请求时间timeout之后才会返回继续执行其它任务。异步采用回调的方式,即请求发送后,函数会立即返回,一旦服务器联结成功操作系统会去触发相应的回调进行相应的处理。这和window的消息处理机制一样。

同步一般用于一次性操作,如判断当前网络是否可用等等。多的就不再一一介绍,在实现上面有两点不同:

(1)在用NSURLConnect的时候一个调用同步函数一个调用了异步函数。

(2)异步的需要实现delegate的相关回调函数。

以下是参考代码:

同步方式:

-(void)UpadaPost:(NSString *)strcontext URL:(NSString *)urlstr{

NSLog(urlstr);

NSLog(strcontext);

assert(strcontext != NULL);

assert(urlstr != NULL);

NSData*postData=[strcontextdataUsingEncoding:NSASCIIStringEncoding  allowLossyConversion:YES];

NSString *postLength= [NSString stringWithFormat:@"%d", [postData length]];

NSMutableURLRequest *request= [[[NSMutableURLRequest alloc] init] autorelease];

[request setURL:[NSURL URLWithString:urlstr]];

[request setHTTPMethod:@"POST"]; [request setTimeoutInterval: 20];//setting timeout

[request setValue:postLength forHTTPHeaderField:@"Content-Length"];

[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];

[request setHTTPBody:postData];

NSURLResponse *respone;

NSError *error;

NSData*myReturn=[NSURLConnection  sendSynchronousRequest:request returningResponse:&respone

error:error];

NSLog(@"%@", [[NSString alloc] initWithData:myReturn encoding:NSUTF8StringEncoding]);

}

异步方式:

-(void)UpadaPost:(NSString *)strcontext URL:(NSString *)urlstr{

NSLog(urlstr);

NSLog(strcontext);

assert(strcontext != NULL);

assert(urlstr != NULL);

NSData *postData= [strcontext dataUsingEncoding:NSASCIIStringEncoding  allowLossyConversion:YES];

NSString *postLength= [NSString stringWithFormat:@"%d", [postData length]];

NSMutableURLRequest *request= [[[NSMutableURLRequest alloc] init] autorelease];

[request setURL:[NSURL URLWithString:urlstr]];

[request setHTTPMethod:@"POST"]; [request setTimeoutInterval: 20];//setting timeout

[request setValue:postLength forHTTPHeaderField:@"Content-Length"];

[request setValue:@"application/x-www-form-urlencoded"  forHTTPHeaderField:@"Content-Type"];

[request setHTTPBody:postData];

NSURLConnection *conn=[[NSURLConnection alloc] initWithRequest:request  delegate:self];

if (conn)

{

NSLog(@"Connection success");

[UIApplication sharedApplication].networkActivityIndicatorVisible=YES;

[conn retain];

}

else

{

// inform the user that the download could not be made

}

}

#pargma mark

以下为相应的回调函数

// 收到响应时, 会触发

- (void)connection:(NSURLConnection *)connection   didReceiveResponse:(NSURLResponse *)response  {

// 注意这里将NSURLResponse对象转换成NSHTTPURLResponse对象才能去

NSHTTPURLResponse *httpResponse= (NSHTTPURLResponse*)response;

if ([response respondsToSelector:@selector(allHeaderFields)]) {

NSDictionary *dictionary= [httpResponse allHeaderFields];

NSLog([dictionary description]);

NSLog(@"%d",[response statusCode]);

}

}

//链接错误

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {

//[self performSelectorOnMainThread:@selector(httpConnectEnd) withObject:nil  waitUntilDone:NO];

NSLog(@"%@",[error localizedDescription]);

}

// Called when a chunk of data has been downloaded.

//接收数据 每收到一次数据, 会调用一次

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {

// Process the downloaded chunk of data.

NSLog(@"%d", [data length]);

//NSLog(@"%@", [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);

//[self performSelectorOnMainThread:@selector(updateProgress) withObject:nil  waitUntilDone:NO];

}

//接收结束

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {

NSLog(@"%@",connection);

//NSLog(@"%lld", received_);

//[self performSelectorOnMainThread:@selector(httpConnectEnd) withObject:nil  waitUntilDone:NO];

// Set the condition which ends the run loop.

}

小结:iPhone应用用HTTP协议和服务器通信的内容介绍完了,希望通过本文的学习能对你有所帮助!

【编辑推荐】

【责任编辑:李程站 TEL:(010)68476606】

点赞 0

http协议与服务器通信,iPhone应用用HTTP协议和服务器通信相关推荐

  1. 服务器可以指定一个网卡只和某个地址通信吗_彻底搞懂计算机网络通信设备与协议...

    [本文版权归微信公众号"代码艺术"(ID:onblog)所有,若是转载请务必保留本段原创声明,违者必究.若是文章有不足之处,欢迎关注微信公众号私信与我进行交流!] 作者:薛勤 公众 ...

  2. 4g模块与服务器通信 消息头,4g模块和云服务器通信

    4g模块和云服务器通信 内容精选 换一换 通过PostgreSQL客户端连接实例的方式有非SSL连接和SSL连接两种,其中SSL连接通过了加密功能,具有更高的安全性.登录弹性云服务器.创建并登录弹性云 ...

  3. IEC61850变电站基本通信结构-原理和模型_6客户-服务器

    新的一天,加油! 在通信中,设备被看做服务器和客户端的关系,根据具体场合,角色有时会有所转换. 服务器模型 下图是服务器和客户端的通信介绍 C/S通信协议集通信 客户端和服务器都是基于ACSI(抽象通 ...

  4. 基于Android硬件设备跟微信服务器通信的项目心得,以UDP Byte通信为例,建立无向连接,0530手札

    这段时间挺忙的,微信企业号等微信系列的教程全部停滞了,原因是我手头上抓着几个项目,加班就不说了,今天刚刚把新接手的项目整到大概%80的样 子吧,准备明天整整,星期一过来直接对接测试,很多朋友跑过来问问 ...

  5. iot架构 mqtt netty_Netty实现高性能IOT服务器(Groza)之手撕MQTT协议篇上

    前言 诞生及优势 MQTT由Andy Stanford-Clark(IBM)和Arlen Nipper(Eurotech,现为Cirrus Link)于1999年开发,用于监测穿越沙漠的石油管道.目标 ...

  6. asp.core api 通过socket和服务器通信发送udp_【网络通信】TCP的通信过程

    本文主要介绍以下几个内容: 1.TCP.UDP.Socket分别是什么?有什么区别? 2.TCP的基本过程. 3.TCP三次握手建立连接. 4.TCP四次挥手断开连接. 5.常考查其他问题. 1.TC ...

  7. 万维网服务器协议提供web,万维网的HTTP和FTP协议.doc

    万维网的HTTP和FTP协议.doc 万维网的HTTP和FTP协议 摘 要:20世纪40年代以来,人们就梦想能拥有一个世界性的信息库.在这个信息库中,信息不仅能被全球的人们存取,而且能轻松地链接到其他 ...

  8. c++判断ftp服务器文件存在性判断_BitTorrent协议与传统文件分发协议对比

    一.文件传输 前端时间做了和文件传输相关的工作,今天抽空做个总结.总结一下平常使用的几种协议以及BtTorrent协议.其实BitTorrent协议也不是什么新协议,它诞生也十几年了.咱也蹭个热点,最 ...

  9. 服务器ie打不开http协议,在浏览器输入地址后,这个世界发生了什么(http协议浅谈)...

    引言 这篇文章是我各处收集有关于http的知识,不成体系,爱看不看?,看完点赞. 我们输入网址之后发生的事情 输入网址并回车(URL 包括 协议名称 域名或者IP 端口号 请求资源具体地址 参数) 解 ...

最新文章

  1. spring Java相对路径/绝对路径总结
  2. 【php】运算符优先级界定
  3. 合肥php开发培训费用,合肥PHP开发培训之PHP文件基础操作
  4. java对象创建的流程到底是什么样子的?new一个对象是真的直接放在堆里吗?其实大有学问!
  5. 阿里云朱照远:AI打开新视界 8K时代已来!
  6. SQL解析器的性能测试
  7. Android 之View绘图原理总结
  8. Docker容器虚拟化技术---Docker运维管理(Docker Compose)4
  9. nodejs图片读取
  10. 小米6android版本更新,钉子户小米6的新生,换电池、背盖,升级android11
  11. Python——day12 nonlcoal关键字、装饰器(开放封闭原则、函数被装饰、最终写法)...
  12. MySQL灾备恢复在线主从复制变成主主复制及多源复制【转】
  13. 爬虫框架Scrapy之Spider
  14. Creo6.0无人机建模与结构设计视频教程
  15. 2022年危险化学品生产单位安全生产管理人员试题模拟考试平台操作
  16. 论文的英文文献在哪找(除了知网)?
  17. 安装emmet时pyv8下载失败
  18. 计算机存储单元的唯一标志是,存储单元的唯一标志是什么
  19. EditPlus 使用技巧以及快捷键
  20. 【Python】列表解析式

热门文章

  1. mysql分布式一致性hash_分布式哈希一致性
  2. js层级选择框样式_【JavaWeb】85:jQuery的各种选择器
  3. linux rsync 常见错误,Linux rsync常见错误
  4. 电脑机箱cad图纸_如何批量打印高清黑白CAD图纸?这么好用的方法现在才知道
  5. mysql-8.0.12语法_mysql-8.0.12 (免安装版) 安装详解
  6. java 对话框 显示图片_Java对话框上显示图片
  7. 13c语言中的文件是一种流式文件,读写时均以字符为单位.,C语言判断题部分.doc...
  8. druiddatasource配置_Spring核心配置文件详解
  9. 【转】1.1异步编程:线程概述及使用
  10. Office Web Apps 2013 修改Excel在线查看文件大小限制