郝萌主倾心贡献,尊重作者的劳动成果,请勿转载。

假设文章对您有所帮助,欢迎给作者捐赠。支持郝萌主,捐赠数额任意,重在心意^_^

我要捐赠: 点击捐赠

Cocos2d-X源代码下载:点我传送

游戏官方下载:http://dwz.cn/RwTjl

游戏视频预览:http://dwz.cn/RzHHd

游戏开发博客:http://dwz.cn/RzJzI

游戏源代码传送http://dwz.cn/Nret1

A.搭建javaserver
使用eclipse、tomcat和struts2框架搭建一个简单的server
1.准备好合适版本号的JDK、eclipse EE、tomcat、struts2 框架包
2.配置JDK和tomcat系统变量
3.在eclipse中创建一个Dynamic Web Project, 勾选创建web.xml
4.解压一个struts2中的app范例。參考当中的web.xml和struts.xml配置
5.配置tomcat。注意配置正确的server的路径和公布路径。不要使用默认的eclipse中的路径
6.引入资源文件,创建相应的ActionSupport就能够处理外部信息了
  
B.iOS中主要的server请求
1.get和post
GET和POST是两种最经常使用的与server进行交互的HTTP方法
GET
GET的语义是获取指定URL的资源
将数据依照variable=value的形式,加入到action所指向的URL后面,而且两者使用"?

"连接。各变量之间使用"&"连接
貌似不安全。由于在传输过程中。数据被放在请求的URL中

传输的数据量小,这主要是由于受URL长度限制
 
 
POST
POST的语义是向指定URL的资源加入数据
将数据放在数据体中,依照变量和值相相应的方式,传递到action所指向URL
全部数据对用户来说不可见
能够传输大量数据,上传文件仅仅能使用Post
 
 
C.iOS发送网络请求
1.发送步骤
实例化URL(网络资源)
依据URL建立URLRequest(网络请求)
默觉得GET请求
对于POST请求。须要创建请求的数据体
利用URLConnection发送网络请求(建立连接)
获得结果

NSURLConnection提供了两个静态方法能够直接以同步或异步的方式向server发送网络请求
同步请求:
sendSynchronousRequest:returningResponse:error:
异步请求:
sendAsynchronousRequest:queue: completionHandler:

 
2.网络传输中的二进制流
在网络请求过程中,接收数据的过程实际上是通过NSURLConnectionDataDelegate来实现的,经常使用代理方法包含:

server開始返回数据,准备工作
(void)connection:didReceiveResponse:
收到server返回的数据。本方法会被调用多次
- (void)connection:didReceiveData:
数据接收完成,做数据的最后处理
(void)connectionDidFinishLoading:
网络连接错误
- (void)connection:didFailWithError:

 
D.练习代码
 
1.使用get请求
 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 }
 
(2).使用异步方法发送get请求
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 }
 
2.使用NSURLConnectionDataDelegate代理发送异步请求
(1)遵守协议
1 @interface ViewController () <NSURLConnectionDataDelegate>
 
(2)设置代理、发送请求
1 /** 使用start & 代理发送、处理异步请求 */
2 - (void) sendAsynRequestWithDelegate:(NSURLRequest *) request {
3 NSURLConnection *connection = [NSURLConnection connectionWithRequest:request delegate:self];
4 [connection start];
5 }
 
(3)实现代理方法
 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 }
 
 
3.使用post请求
 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 }
 
 
4.设置请求属性
(1)设置超时时限
1     // 使用可变request
2 NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
3 // 设置请求超时时间
4 request.timeoutInterval = 5;
 
4.中文转码
使用UTF8转码
[urlStr stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding];
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信息的更多相关文章

  1. [iOS 多线程 & 网络 - 2.0] - 发送接收 服务器信息

    A.搭建java服务器 使用eclipse.tomcat和struts2框架搭建一个简单的服务器 1.准备好合适版本的JDK.eclipse EE.tomcat.struts2 框架包 2.配置JDK ...

  2. iOS多线程与网络开发之多线程概述

    郝萌主倾心贡献,尊重作者的劳动成果,请勿转载. 假设文章对您有所帮助,欢迎给作者捐赠.支持郝萌主,捐赠数额任意,重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源代码下载:点我传送 游戏官方下 ...

  3. iOS多线程与网络开发之多线程NSThread

    郝萌主倾心贡献,尊重作者的劳动成果,请勿转载. 假设文章对您有所帮助,欢迎给作者捐赠,支持郝萌主,捐赠数额任意,重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源代码下载:点我传送 游戏官方下 ...

  4. iOS多线程与网络开发之解析json数据

    郝萌主倾心贡献,尊重作者的劳动成果,请勿转载. // 同步发送信息 2 NSData *data = [NSURLConnection sendSynchronousRequest:request r ...

  5. iOS多线程与网络开发之小文件上传

    郝萌主倾心贡献,尊重作者的劳动成果,请勿转载. /** 取得本地文件的MIMEType */ 2 - (void) getMIMEType { 3 // Socket 实现断点上传 4 5 //apa ...

  6. iOS多线程与网络开发之多线程GCD

    郝萌主倾心贡献,尊重作者的劳动成果.请勿转载. 假设文章对您有所帮助,欢迎给作者捐赠.支持郝萌主.捐赠数额任意.重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源代码下载:点我传送 游戏官方下 ...

  7. 多线程与网络之NSURLConnection发送请求

    *:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...

  8. XMPP客户端开发(2)--发送接收消息

    客户端连接上服务器并登录以后,可以发送.接收消息. 首先需要定义Chat,MessageListener和ChatMessageListener几个变量: private static Chat ch ...

  9. iOS多线程与网络开发之NSOperation

    郝萌主倾心贡献,尊重作者的劳动成果,请勿转载. 假设文章对您有所帮助,欢迎给作者捐赠,支持郝萌主,捐赠数额任意,重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源代码下载:点我传送 游戏官方下 ...

随机推荐

  1. grid 布局

    display:grid 是一种新的布局方式,旧的布局方式通常有副作用,例如float(需要额外修复浮动)或者inline-block(两个元素之间的空格问题)   把父元素定义为grid,就像表格一 ...

  2. BOM对象

    每一个frames都有自己的window对象,也就是每个frames都有自己的全局对象,它们之前是相互独立的,包括各自独立的本地对象,top.Object !== top.frames[0].Obje ...

  3. ionic3.0--angular4.0 引入第三方插件库的方法

    ionic3.0 引入第三方插件 (swiper),方法很多,现详细说明下官方推荐(typings)做法. 1.全局安装Typings 1. npm install -g typings  2.搜索你 ...

  4. salesforce零基础学习(八十二)审批邮件获取最终审批人和审批意见

    项目中,审批操作无处不在.配置审批流时,我们有时候会用到queue,related user设置当前步骤的审批人,审批人可以一个或者多个.当审批人有多个时,邮件中获取当前记录的审批人和审批意见就不能随 ...

  5. Unity 游戏框架搭建 (二十) 更安全的对象池

    上篇文章介绍了,只需通过实现IObjectFactory接口和继承Pool类,就可以很方便地实现一个SimpleObjectPool.SimpleObjectPool可以满足大部分的对象池的需求.而笔 ...

  6. Docker Swarm 中最重要的概念- 每天5分钟玩转 Docker 容器技术(94)

    从主机的层面来看,Docker Swarm 管理的是 Docker Host 集群.所以先来讨论一个重要的概念 - 集群化(Clustering). 服务器集群由一组网络上相互连接的服务器组成,它们一 ...

  7. Python之os.fork

    [参考资料] http://www.01happy.com/python-fork-create-process/ http://www.python-course.eu/forking.php ht ...

  8. Python返回Json格式定义的例子

    { "code": 0, // code为0表示成功,否则为1 "message": null, "data": { "syscp ...

  9. Python源码分析

  10. jinja2模板常用方法

    数学运算+,-,*,/,**,//,%等数学运算符都支持. 逻辑运算and,or,not也同样支持 1.in判断元素是否在集合中 2.|管道操作符,默认使用Apply调用一个方法 3.~字符串连接 4 ...