本内容用于完成一个小功能,iOS客户端发送名字字符,服务器接收这个名字,然后在iOS客户端异步通信把服务器返回的内容显示出来。首先介绍几个知识点:
使用GET网络通信
PHP中何时使用 GET?
通过 GET 方法从表单发送的信息对任何人都是可见的(所有变量名和值都显示在 URL 中)。GET 对所发送信息的数量也有限制。限制在大于 2000 个字符。不过,由于变量显示在 URL 中,把页面添加到书签中也更为方便。
GET 可用于发送非敏感的数据。
PHP服务器端的代码
<?php
$result= $_GET["name"];
$arr = array(
'name'=>"returned name is".$result,
);
$json = json_encode($arr);
echo $json;
功能十分简单,接收客户端发送的“name”返回json格式的数组;
服务器端的代码
NSString *text = [NSString stringWithFormat:@"http://localhost:63342/test/welcome_get.php?<span style="color:#ff0000;">name=%@",self.nameTextField.text</span>];
NSURL *url = [NSURL URLWithString:text];
NSLog(@"%@",url);
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[NSURLConnection sendAsynchronousRequest:request queue:<span style="color:#ff0000;">[NSOperationQueue mainQueue]</span> completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
NSLog(@"%@",response);
if (data) {
dispatch_async(dispatch_get_main_queue(), ^{
NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
NSString *text = json[@"name"];
self.textView.text = text;
});
}
}];
将UI里的nameTextField的文字发给前面的服务器,然后解析jsondata,并在textView中显示键值为name的返回值;需要注意的是由于此处传输的信息量很小我是用了mainQueue,这容易阻塞进程,不过此处可以。
最后结果如下:
使用POST实现网络通信
何时使用 POST?
通过 POST 方法从表单发送的信息对其他人是不可见的(所有名称/值会被嵌入 HTTP 请求的主体中),并且对所发送信息的数量也无限制。
此外 POST 支持高阶功能,比如在向服务器上传文件时进行 multi-part 二进制输入。
不过,由于变量未显示在 URL 中,也就无法将页面添加到书签。
提示:开发者偏爱 POST 来发送表单数据。
PHP代码改为
POST:
<?php
$result= $_POST["name"];
$arr = array(
'name'=>"returned name is ".$result,
);
$json = json_encode($arr);
echo $json;
OC代码改为:
NSMutableURLRequest *request = [<span style="color:#ff6666;">NSMutableURLRequest</span> requestWithURL:[NSURL URLWithString:@"http://localhost:63342/test/welcome_get.php"]];
request.HTTPMethod = @"POST";
request.HTTPBody = [[NSString stringWithFormat:@"name=%@",self.nameTextField.text] dataUsingEncoding:NSUTF8StringEncoding ];
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
if (data) {
NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
NSLog(@"%@",json);
NSString *text = json[@"name"];
此处使用httpmethod和httpbody来进行设置,并使用UTF-8编码。
运行结果是一样的。