iOS多线程与网络开发之发送接收server信息
郝萌主倾心贡献,尊重作者的劳动成果,请勿转载。
假设文章对您有所帮助,欢迎给作者捐赠。支持郝萌主,捐赠数额任意,重在心意^_^
我要捐赠: 点击捐赠
Cocos2d-X源代码下载:点我传送
游戏官方下载:
http://dwz.cn/RwTjl
游戏视频预览:
http://dwz.cn/RzHHd
游戏开发博客:
http://dwz.cn/RzJzI
游戏源代码传送:
http://dwz.cn/Nret1
GET
GET的语义是获取指定URL的资源
将数据依照variable=value的形式,加入到action所指向的URL后面,而且两者使用"?
"连接。各变量之间使用"&"连接
貌似不安全。由于在传输过程中。数据被放在请求的URL中

POST的语义是向指定URL的资源加入数据
将数据放在数据体中,依照变量和值相相应的方式,传递到action所指向URL
全部数据对用户来说不可见
能够传输大量数据,上传文件仅仅能使用Post

默觉得GET请求
对于POST请求。须要创建请求的数据体
利用URLConnection发送网络请求(建立连接)
获得结果
NSURLConnection提供了两个静态方法能够直接以同步或异步的方式向server发送网络请求
同步请求:
sendSynchronousRequest:returningResponse:error:
异步请求:
sendAsynchronousRequest:queue: completionHandler:
server開始返回数据,准备工作
(void)connection:didReceiveResponse:
收到server返回的数据。本方法会被调用多次
- (void)connection:didReceiveData:
数据接收完成,做数据的最后处理
(void)connectionDidFinishLoading:
网络连接错误
- (void)connection:didFailWithError:

1 (1).使用同步方法发送get请求(不经常使用)
2 /** 发送get消息 */
3 - (void) testGet {
4 NSString *requestStr = [NSString stringWithFormat:@"http://192.168.0.21:8080/MyTestServer/login? user=%@&password=%@", self.userField.text, self.passwordField.text];
5
6 NSURL *url = [NSURL URLWithString:requestStr];
7
8 // 默认就是get请求
9 NSURLRequest *request = [NSURLRequest requestWithURL:url];
10
11 // 使用同步方法发送请求
12 [self sendSynRequest:request];
13 }
14
15 /** 同步发送请求 */
16 - (void) sendSynRequest:(NSURLRequest *) request {
17 // 同步发送信息
18 NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
19
20 [self dealWithResponseData:data];
21 }
22
23 /** 处理返回数据 */
24 - (void) dealWithResponseData:(NSData *) data {
25 // 解析数据
26 if (data) { // 得到返回数据
27 // 解除屏幕锁
28 [MBProgressHUD hideHUD];
29
30 // 解析json数据
31 NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil];
32
33 // 处理返回的数据
34 NSString *result = dict[@"success"];
35 if (result) {
36 [MBProgressHUD showSuccess:result];
37 } else {
38 result = dict[@"error"];
39 if (result) {
40 [MBProgressHUD showError:result];
41 }
42 }
43 } else {
44 [MBProgressHUD showError:@"网络繁忙。请稍后再试~"];
45 }
46 }

1 /** 异步发送请求 */
2 - (void) sendAsynRequest:(NSURLRequest *) request {
3 NSOperationQueue *queue = [NSOperationQueue mainQueue];
4 [NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
5
6 [self dealWithResponseData:data];
7 }];
8 }

1 @interface ViewController () <NSURLConnectionDataDelegate>
1 /** 使用start & 代理发送、处理异步请求 */
2 - (void) sendAsynRequestWithDelegate:(NSURLRequest *) request {
3 NSURLConnection *connection = [NSURLConnection connectionWithRequest:request delegate:self];
4 [connection start];
5 }
1 #pragma mark - NSURLConnectionDataDelegate 代理方法
2 /** 收到server回应 */
3 - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
4 NSLog(@"didReceiveResponse");
5 self.data = [NSMutableData data];
6 }
7
8 /** 接收到的数据,会调用多次,数据被切割接收 */
9 - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
10 NSLog(@"didReceiveData");
11 [self.data appendData:data];
12 }
13
14 /** 接收数据完成 */
15 - (void)connectionDidFinishLoading:(NSURLConnection *)connection {
16 NSLog(@"connectionDidFinishLoading");
17 [self dealWithResponseData:self.data];
18 }
1 #pragma mark - post
2 - (void) testPost {
3 NSString *requestStr = [NSString stringWithFormat:@"http://192.168.0.21:8080/MyTestServer/login"];
4 NSURL *url = [NSURL URLWithString:requestStr];
5
6 NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
7 request.timeoutInterval = 5;
8
9 // 设置为post方式请求
10 request.HTTPMethod = @"POST";
11
12 // 设置请求头
13 [request setValue:@"ios" forHTTPHeaderField:@"User-Agent"];
14
15 // 设置请求体
16 NSString *param = [NSString stringWithFormat:@"user=%@&password=%@", self.userField.text, self.passwordField.text];
17 request.HTTPBody = [param dataUsingEncoding:NSUTF8StringEncoding];
18
19 // 发送请求
20 // 使用主线程来处理UI刷新
21 NSOperationQueue *queue = [NSOperationQueue mainQueue];
22 [NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
23 [self dealWithResponseData:data];
24 }];
25
26 }
1 // 使用可变request
2 NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
3 // 设置请求超时时间
4 request.timeoutInterval = 5;
1 NSString *requestStr = [NSString stringWithFormat:@"http://192.168.0.21:8080/MyTestServer/login?user=%@&password=%@", self.userField.text, self.passwordField.text];
2
3 // 由于url不能传送中文,所以须要转码
4 requestStr = [requestStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
郝萌主倾心贡献,尊重作者的劳动成果,请勿转载。
假设文章对您有所帮助,欢迎给作者捐赠,支持郝萌主,捐赠数额任意,重在心意^_^
我要捐赠: 点击捐赠
Cocos2d-X源代码下载:点我传送
游戏官方下载:
http://dwz.cn/RwTjl
游戏视频预览:
http://dwz.cn/RzHHd
游戏开发博客:
http://dwz.cn/RzJzI
游戏源代码传送:
http://dwz.cn/Nret1
iOS多线程与网络开发之发送接收server信息的更多相关文章
- [iOS 多线程 & 网络 - 2.0] - 发送接收 服务器信息
A.搭建java服务器 使用eclipse.tomcat和struts2框架搭建一个简单的服务器 1.准备好合适版本的JDK.eclipse EE.tomcat.struts2 框架包 2.配置JDK ...
- iOS多线程与网络开发之多线程概述
郝萌主倾心贡献,尊重作者的劳动成果,请勿转载. 假设文章对您有所帮助,欢迎给作者捐赠.支持郝萌主,捐赠数额任意,重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源代码下载:点我传送 游戏官方下 ...
- iOS多线程与网络开发之多线程NSThread
郝萌主倾心贡献,尊重作者的劳动成果,请勿转载. 假设文章对您有所帮助,欢迎给作者捐赠,支持郝萌主,捐赠数额任意,重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源代码下载:点我传送 游戏官方下 ...
- iOS多线程与网络开发之解析json数据
郝萌主倾心贡献,尊重作者的劳动成果,请勿转载. // 同步发送信息 2 NSData *data = [NSURLConnection sendSynchronousRequest:request r ...
- iOS多线程与网络开发之小文件上传
郝萌主倾心贡献,尊重作者的劳动成果,请勿转载. /** 取得本地文件的MIMEType */ 2 - (void) getMIMEType { 3 // Socket 实现断点上传 4 5 //apa ...
- iOS多线程与网络开发之多线程GCD
郝萌主倾心贡献,尊重作者的劳动成果.请勿转载. 假设文章对您有所帮助,欢迎给作者捐赠.支持郝萌主.捐赠数额任意.重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源代码下载:点我传送 游戏官方下 ...
- 多线程与网络之NSURLConnection发送请求
*:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...
- XMPP客户端开发(2)--发送接收消息
客户端连接上服务器并登录以后,可以发送.接收消息. 首先需要定义Chat,MessageListener和ChatMessageListener几个变量: private static Chat ch ...
- iOS多线程与网络开发之NSOperation
郝萌主倾心贡献,尊重作者的劳动成果,请勿转载. 假设文章对您有所帮助,欢迎给作者捐赠,支持郝萌主,捐赠数额任意,重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源代码下载:点我传送 游戏官方下 ...
随机推荐
- AngularJS学习篇(十)
AngularJS Select(选择框) 使用 ng-options 创建选择框 在 AngularJS 中我们可以使用 ng-option 指令来创建一个下拉列表,列表项通过对象和数组循环输出,如 ...
- Problem D: 来开个书店吧
某出版社可出版图书和磁带.其中图书按照每页的价格乘以页数进行定价,磁带根据每10分钟的价格乘以磁带录音的分钟数进行定价.请定义Publicatioin.Book.Tape以及BookStore四个类. ...
- word,excel,ppt转Pdf,Pdf转Swf,通过flexpaper+swftools实现在线预览
其实这是我好几年前的项目,现在再用这种方式我也不建议了,毕竟未来flash慢慢会淘汰,此方式也是因为目测大部分人都装了flash,才这么做的,但是页面展示效果也不好.其实还是考虑收费的控件,毕竟收费的 ...
- Docker Register安装与基本认证
准备 基本事项 Docker环境 登录授权方式 镜像存放地址 HTTPS外网访问 启动Docker Registry 1. 基本事项 本篇涉及到的数据文件都放在/data目录下, 其中会有三个子目录 ...
- JavaScript基本知识点整理(超实用)
絮叨絮叨 今天给大家分享一下这两天自己整理的JavaScript部分的笔记,下面都是我觉得比较常用的,希望能帮助到大家! 1. 导入JS的三种方式 ①在HTML ...
- SSH框架基础
首先,SSH不是一个框架,而是多个框架(struts+spring+hibernate)的集成,是目前较流行的一种Web应用程序开源集成框架,用于构建灵活.易于扩展的多层Web应用程序. 集成SSH框 ...
- h5 canvas 图片上传操作
最近写的小 demo,使用的是h5的 canvas来对图片进行放大,移动,剪裁等等这是最原始的代码,比较接近我的思路,后续会再对格式和结构进行优化 html: <pre name="c ...
- 十二、Hadoop学习笔记————Hive的基本原理
一般用户用CLI(命令行界面)接口,元数据库含有表结构 单用户.多用户.远程服务 生成db文件,只能单客户端使用数据库 多用户是最常用的使用模式 配置与多用户一致 数据格式用户自定义 所有的表都存于改 ...
- C#Winform窗体 DataGridView全选按钮的实现方式
最近,在做CS程序遇到一个头疼的问题,datagridview列表的全选按钮遇到各种问题,做的是自适应窗体大小,当窗体最大化导致全选按钮出现与列表数据不一致,特别不搭配,试了很久,网上也找了好多资料各 ...
- python自动发邮件库yagmail
#### 一般发邮件方法 我以前在通过Python实现自动化邮件功能的时候是这样的: import smtplib from email.mime.text import MIMEText from ...