http协议与服务器通信,iPhone应用用HTTP协议和服务器通信
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协议和服务器通信相关推荐
- 服务器可以指定一个网卡只和某个地址通信吗_彻底搞懂计算机网络通信设备与协议...
[本文版权归微信公众号"代码艺术"(ID:onblog)所有,若是转载请务必保留本段原创声明,违者必究.若是文章有不足之处,欢迎关注微信公众号私信与我进行交流!] 作者:薛勤 公众 ...
- 4g模块与服务器通信 消息头,4g模块和云服务器通信
4g模块和云服务器通信 内容精选 换一换 通过PostgreSQL客户端连接实例的方式有非SSL连接和SSL连接两种,其中SSL连接通过了加密功能,具有更高的安全性.登录弹性云服务器.创建并登录弹性云 ...
- IEC61850变电站基本通信结构-原理和模型_6客户-服务器
新的一天,加油! 在通信中,设备被看做服务器和客户端的关系,根据具体场合,角色有时会有所转换. 服务器模型 下图是服务器和客户端的通信介绍 C/S通信协议集通信 客户端和服务器都是基于ACSI(抽象通 ...
- 基于Android硬件设备跟微信服务器通信的项目心得,以UDP Byte通信为例,建立无向连接,0530手札
这段时间挺忙的,微信企业号等微信系列的教程全部停滞了,原因是我手头上抓着几个项目,加班就不说了,今天刚刚把新接手的项目整到大概%80的样 子吧,准备明天整整,星期一过来直接对接测试,很多朋友跑过来问问 ...
- iot架构 mqtt netty_Netty实现高性能IOT服务器(Groza)之手撕MQTT协议篇上
前言 诞生及优势 MQTT由Andy Stanford-Clark(IBM)和Arlen Nipper(Eurotech,现为Cirrus Link)于1999年开发,用于监测穿越沙漠的石油管道.目标 ...
- asp.core api 通过socket和服务器通信发送udp_【网络通信】TCP的通信过程
本文主要介绍以下几个内容: 1.TCP.UDP.Socket分别是什么?有什么区别? 2.TCP的基本过程. 3.TCP三次握手建立连接. 4.TCP四次挥手断开连接. 5.常考查其他问题. 1.TC ...
- 万维网服务器协议提供web,万维网的HTTP和FTP协议.doc
万维网的HTTP和FTP协议.doc 万维网的HTTP和FTP协议 摘 要:20世纪40年代以来,人们就梦想能拥有一个世界性的信息库.在这个信息库中,信息不仅能被全球的人们存取,而且能轻松地链接到其他 ...
- c++判断ftp服务器文件存在性判断_BitTorrent协议与传统文件分发协议对比
一.文件传输 前端时间做了和文件传输相关的工作,今天抽空做个总结.总结一下平常使用的几种协议以及BtTorrent协议.其实BitTorrent协议也不是什么新协议,它诞生也十几年了.咱也蹭个热点,最 ...
- 服务器ie打不开http协议,在浏览器输入地址后,这个世界发生了什么(http协议浅谈)...
引言 这篇文章是我各处收集有关于http的知识,不成体系,爱看不看?,看完点赞. 我们输入网址之后发生的事情 输入网址并回车(URL 包括 协议名称 域名或者IP 端口号 请求资源具体地址 参数) 解 ...
最新文章
- spring Java相对路径/绝对路径总结
- 【php】运算符优先级界定
- 合肥php开发培训费用,合肥PHP开发培训之PHP文件基础操作
- java对象创建的流程到底是什么样子的?new一个对象是真的直接放在堆里吗?其实大有学问!
- 阿里云朱照远:AI打开新视界 8K时代已来!
- SQL解析器的性能测试
- Android 之View绘图原理总结
- Docker容器虚拟化技术---Docker运维管理(Docker Compose)4
- nodejs图片读取
- 小米6android版本更新,钉子户小米6的新生,换电池、背盖,升级android11
- Python——day12 nonlcoal关键字、装饰器(开放封闭原则、函数被装饰、最终写法)...
- MySQL灾备恢复在线主从复制变成主主复制及多源复制【转】
- 爬虫框架Scrapy之Spider
- Creo6.0无人机建模与结构设计视频教程
- 2022年危险化学品生产单位安全生产管理人员试题模拟考试平台操作
- 论文的英文文献在哪找(除了知网)?
- 安装emmet时pyv8下载失败
- 计算机存储单元的唯一标志是,存储单元的唯一标志是什么
- EditPlus 使用技巧以及快捷键
- 【Python】列表解析式
热门文章
- mysql分布式一致性hash_分布式哈希一致性
- js层级选择框样式_【JavaWeb】85:jQuery的各种选择器
- linux rsync 常见错误,Linux rsync常见错误
- 电脑机箱cad图纸_如何批量打印高清黑白CAD图纸?这么好用的方法现在才知道
- mysql-8.0.12语法_mysql-8.0.12 (免安装版) 安装详解
- java 对话框 显示图片_Java对话框上显示图片
- 13c语言中的文件是一种流式文件,读写时均以字符为单位.,C语言判断题部分.doc...
- druiddatasource配置_Spring核心配置文件详解
- 【转】1.1异步编程:线程概述及使用
- Office Web Apps 2013 修改Excel在线查看文件大小限制