IOS中的网络编程详解
在移动互联网时代,几乎所有应用都需要用到网络,比如QQ、微博、网易新闻、优酷、百度地图,只有通过网络跟外界进行数据交互、数据更新,应用才能保持新鲜、活力,如果没有了网络,也就缺少了数据变化,无论外观多么华丽,终将变成一潭死水。下面我们尝试一下如何进行网络请求
http编程其实就是http请求。http请求最长用的方法是 get 和 post 方法。
1>get方法和post方法相比理解起来比较简单,get方法可以直接请求一个url,也可以url后面拼接上参数作为一个新的url地址进行请求。get方法后面的value要经过unicode编码。form的enctype属性默认为application/x-www-form-urlencoded。不能发送二进制文件。
2>post方法相对要复杂一些。首先post方法要设置key和value ,所有的key和value都会拼接成 key1=value1&key2=value2的样式的字符串,然后这个字符串转化为二进制放到 http请求的body中。当请求发送的时候,也就跟随body一起传给服务器。http请求Content-Type设置为:application/x-www-form-urlencoded。这里讲的只是简单的post请求,一般发送文件不会选择这种方式(从技术方面考虑也可以发送文件,就是把文件以 key 和 value的方式放入)。下面我们再讨论一下post发送二进制文件更加普遍的方法

1、发送请求
- (void)viewDidLoad {
//创建一个链接,别切拼接需要传递的参数,由于服务器为本地搭建,接受两个参数一个是用户名,一个是用户密码,因此我这里传递两个参数过去,默认的是Get方式
NSURL * url=[NSURL URLWithString:@"http://192.168.0.111/logo.php?userName=jereh&pwd=123"];
//根据练级e
NSMutableURLRequest * request=[NSMutableURLRequest requestWithURL:url];
//链接网络并发送请求
[NSURLConnection connectionWithRequest:request delegate:self];
}
2、接受返回的数据
网络请求后我们需要接受返回的数据,这里我们需要实现代理方法来接受返回数据,这里我们需要实现协议,并定义一个可变的NSData对象

以下几个代理方法是经常用到的
#pragma mark - NSURLConnectionDataDelegate #pragma mark 刚接收到服务器响应的时候调用
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{
self.data=[NSMutableData data];
NSLog(@"开始响应");
}
#pragma mark 开始接收服务器传递数据的时候调用,由于当传递的数据很大的时候,系统会分多次接受,因此我们需要定义一个可变的二进制对象来保存每次请求的数据
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{
NSLog(@"开始接收数据");
[self.data appendData:data];
}
#pragma mark 结束接收服务器数据的时候调用
- (void)connectionDidFinishLoading:(NSURLConnection *)connection{ NSString * str=[[NSString alloc] initWithData:self.data encoding:NSUTF8StringEncoding];
NSLog(@"%@",str);
} #pragma mark 接受数据出错的时候调用
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{
NSLog(@"请求出错"); }
3、POST方法请求
上面我们采用的get方法,如果我们采用POST方法如何请求呢,只需要将不可变的请求变为可变的请求然后设置方法即可
- (void)viewDidLoad {
//创建一个请求
NSURL * url=[NSURL URLWithString:@"http://192.168.0.111/logo.php?userName=jereh&pwd=123"];
NSMutableURLRequest * request=[NSMutableURLRequest requestWithURL:url];
//设置方法
request.HTTPMethod=@"POST";
//设置参数
NSString * param=@"userName=jereh&&pwd=123";
NSData * data=[param dataUsingEncoding:NSUTF8StringEncoding];
//设置请求体
request.HTTPBody=data;
//链接网络并发送请求
[NSURLConnection connectionWithRequest:request delegate:self];
}
4 同步方式发送请求
另外我们才发送请求的时候也可以采用同步方式的方式,如果我们在网络请求的时候需要等待网络请求结束在执行某个操作,我们可以采取同步请求
NSData * data= [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
5 block形式异步请求
另外在发送异步请求的时候,我们也可以采取block的形式,如下
NSOperationQueue * queue=[NSOperationQueue mainQueue];
[NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
NSString * str=[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
}];
出处:http://www.cnblogs.com/jerehedu/
版权声明:本文版权归烟台杰瑞教育科技有限公司和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
技术咨询:

IOS中的网络编程详解的更多相关文章
- iOS中MVC等设计模式详解
iOS中MVC等设计模式详解 在iOS编程,利用设计模式可以大大提高你的开发效率,虽然在编写代码之初你需要花费较大时间把各种业务逻辑封装起来.(事实证明这是值得的!) 模型-视图-控制器(MVC)设计 ...
- TCP/UDP Linux网络编程详解
本文主要记录TCP/UDP网络编程的基础知识,采用TCP/UDP实现宿主机和目标机之间的网络通信. 内容目录 1. 目标2.Linux网络编程基础2.1 嵌套字2.2 端口2.3 网络地址2.3.1 ...
- Linux 网络编程详解九
TCP/IP协议中SIGPIPE信号产生原因 .假设客户端socket套接字close(),会给服务器发送字节段FIN: .服务器接收到FIN,但是没有调用close(),因为socket有缓存区,所 ...
- Socket网络编程详解
一,socket的起源 socket一词的起源 在组网领域的首次使用是在1970年2月12日发布的文献IETF RFC33中发现的, 撰写者为Stephen Carr.Steve Crocker和Vi ...
- Java网络编程详解
内容: 1.网络通信协议 2.UDP与TCP 3.UDP通信 4.TCP通信 5.网络编程总结 1.网络通信协议 (1)基本概念 网络:由多台计算机以及外部设备连接起来的一个系统,我们称之为网络 通信 ...
- python网络编程详解
最近在看<UNIX网络编程 卷1>和<FREEBSD操作系统设计与实现>这两本书,我重点关注了TCP协议相关的内容,结合自己后台开发的经验,写下这篇文章,一方面是为了帮助有需要 ...
- C#中面向对象编程中的函数式编程详解
介绍 使用函数式编程来丰富面向对象编程的想法是陈旧的.将函数编程功能添加到面向对象的语言中会带来面向对象编程设计的好处. 一些旧的和不太老的语言,具有函数式编程和面向对象的编程: 例如,Smallta ...
- Go的网络编程详解
一 互联网协议介绍 1.1互联网分层模型 互联网的逻辑实现被分为好几层.每一层都有自己的功能,就像建筑物一样,每一层都靠下一层支持.用户接触到的只是最上面的那一层,根本不会感觉到下面的几层.要理解互联 ...
- Python Socket网络编程详解
Socket 简介 socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. s ...
随机推荐
- BZOJ3009 : 集合
取一棵生成森林,根据题目限制可得,与一个点相连的多余的边数是$O(\sqrt{m})$级别的. 对于树边,每个点维护3棵权值线段树,依次保存它的儿子里各个集合的边. 再开3*3个分块数组,记录多余边以 ...
- java读取记事本文件第一个字符遇到的一个坑
记事本数据是这样的: Faq_faqTitle=常见问题_标题Faq_faqKeyword=关键字Faq_faqDescription=FAQ描述...... 文件编码:utf-8有签名 然后用jav ...
- MikroTik RouterOS U盘安装工具netinstall的使用
注意: 1.此工具我没测试成功,比如把一个U盘用这个工具制作好之后,实质上插入电脑启动会有卡死现象,不太稳定. 2.其实官方提供的教程很大一部分是这样的意思,比如把外接硬盘以USB或者SATA的形式插 ...
- 使用cwRsync实现windows下文件定时同步
1.参考文献: 使用cwRsync实现windows下文件定时同步(备份) 文件同步工具CwRsync的使用方法及常用命令详解 2.背景: 当前的SCADA架构中,有1台Server,5台FE,还有1 ...
- PGXZ-腾讯全功能分布式关系数据集群
PGXZ-腾讯全功能分布式关系数据集群
- linux内核数据包转发流程(二):中断
[版权声明:转载请保留出处:blog.csdn.net/gentleliu.邮箱:shallnew*163.com] 内核在处理2层数据包之前,必须先处理中断系统.设立中断系统,才有可能每秒处理成千的 ...
- redis主从集群搭建及容灾部署(哨兵sentinel)
Redis也用了一段时间了,记录一下相关集群搭建及配置详解,方便后续使用查阅. 提纲 Redis安装 整体架构 Redis主从结构搭建 Redis容灾部署(哨兵sentinel) Redis常见问题 ...
- JAVA各种系统架构图及其简介
1.spring架构图 Spring是一个开源框架,是为了解决企业应用程序开发复杂性而创建的.框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为J2EE应用程序开发提供集成的框 ...
- Opencv2教程一:图像变换之阈值二值threshold
网名:无名 QQ:16349023 email:mengwzy@qq.com 曾经非常少写教程,写的可能有点乱希望大对家有帮助 threshold 方法是通过遍历灰度图中点.将图像信息二值化,处理 ...
- lodash用法系列(1),数组集合操作
Lodash用来操作对象和集合,比Underscore拥有更多的功能和更好的性能. 官网:https://lodash.com/引用:<script src="//cdnjs.clou ...