本地计算机的IP地址和域名
IP地址:127.0.0.1
是回送地址,指本地机,一般用来测试使用。
无论什么程序,一旦使用回送地址发送数据,协议软件立即返回,不要进行任何网络传输。
常用测试命令:ping 127.0.0.1
域名:localhost
在计算机网络中,localhost(本地主机)是给回路网络接口的一个标准主机名,相对应的IP地址为127.0.0.1
打开本地连接,如果出现乱码,解决方法如下:
如下所示:
工程代码如下所示:
<span style="font-size:18px;">//
// ViewController.m
// 异步连接参数解析
//
// Created by apple on 15/10/26.
// Copyright (c) 2015年 LiuXun. All rights reserved.
//
#import "ViewController.h"
#import <Foundation/Foundation.h>
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
/* 0.
此方法虽然可以直接从网址请求数据,但有时候返回的data是nil,无法打印错误信息
这个方法是同步的
dataWithContentsOfURL:url 方法是同步的,超时时长是60秒
NSData *data = [NSData dataWithContentsOfURL:url];
UIImage *image = [UIImage imageWithData:data];
*/
// 1. url—— 访问的是自己主机的服务器 注意地址中不可含有中文字符
NSURL *url = [NSURL URLWithString:@"http://127.0.0.1/demo.json"];
// 2. 建立一个请求对象
/** 第一种方式
NSURLRequest *request = [NSURLRequest requestWithURL:url];
*/
/**
第二种方式
参数: url:资源路径
cachePolicy : 资源策略
timeoutInterval :超时时间,默认是60秒(默认超过60秒服务器无响应就返回请求失败信息)。一般手动设置为15~20秒
SDWebImage的超时时长设置为15秒
AFN使用的是系统的60秒
*/
NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:0 timeoutInterval:20];
// 3. 建立连接,发送请求到服务器
/**
request:请求
queue:队列,这个队列,是完成以后,回调block执行的队列,也就是说是数据请求完成执行完成代码块才使用的队列
Asynchronous:只要是异步,肯定会开新的线程。
Handler:网络访问完成以后执行的代码块
response:服务器的响应(包含响应的信息,响应头之类的... 到下载的时候才会关心此参数)
data:返回的二进制数据
connectionError:服务返回的错误, 只要有网络访问,就有可能有错误
使用场景:如果下载的是压缩包,解压缩也是一个耗时操作。
如果在block内有需要执行耗时操作,就把queue指定为子线程,然后在耗时操作执行完毕获得主线程并在主线程上更新UI。 如果block块内没有耗时操作要执行或只需要更新UI,就直接执行queue参数为主线程即可
*/
[NSURLConnection sendAsynchronousRequest:request queue:[[NSOperationQueue alloc] init ]completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
// 网络请求完成以后会调用这段代码,从服务器获得二进制数据
if (connectionError || data == nil) {
NSLog(@"您的网络不给力,请稍后再试");
return;
}
// 假设是解压缩——耗时操作
NSLog(@"%@", [NSThread currentThread]);
//在主线程更新UI
dispatch_async(dispatch_get_main_queue(),^{
NSLog(@"%@------%@", [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding], [NSThread currentThread]);
});
}];
}
@end
/**
typedef NS_ENUM(NSUInteger, NSURLRequestCachePolicy)
{
NSURLRequestUseProtocolCachePolicy = 0, // 默认缓存策略,会自动缓存
NSURLRequestReloadIgnoringLocalCacheData = 1,
NSURLRequestReload(刷新)Ignoring(忽略)Local(本地)CacheData (缓存数据)= 1, 刷新忽略本地数据,即每次都从服务器去加载数据,忽略本地数据
NSURLRequestReloadIgnoringLocalAndRemoteCacheData = 4, // Unimplemented(苹果预留参数,还未实现)
-------------------------------------------------------------------------------------------------
此两个 一般来离线访问。一般配合Reachability(苹果提供的检测网络连接的框架来使用)
// 如果用户使用的是WIFI,就使用这个策略
NSURLRequestReturnCacheDataElseLoad = 2, // 如果有缓存就使用缓存,如果没有缓存就上网。
// 检测如果使用的是3G就使用如下策略
NSURLRequestReturnCacheDataDontLoad = 3, // 如果有缓存,就是用缓存。没有就返回空,不会网络请求数据
-------------------------------------------------------------------------------------------------
NSURLRequestReloadRevalidatingCacheData = 5, // Unimplemented(苹果预留参数,还未实现)
};
*/</span>
运行结果如下所示: