iOS中的网络请求 和 网络监测
1、网络监测
//根据主机名判断网络是否连接
Reachability *reach = [Reachability reachabilityWithHostName:@"www.baidu.com"];
self.reach = reach;
//注册网络监听通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged) name:kReachabilityChangedNotification object:nil];
//开启监听
[reach startNotifier];
//根据currentReachabilityStatus判断网络状态
NotReachable = 0, //没有网络
ReachableViaWiFi = 2, //不用花钱WIFI
ReachableViaWWAN = 1 //2G,3G,4G
- (void)dealloc {
//把当前的对象所有通知删除
[[NSNotificationCenter defaultCenter] removeObserver:self];
//停止监听
[self.reach stopNotifier];
}
2、异步网络请求
//1、创建URL,访问网络资源的唯一地址
NSURL * url = [NSURL URLWithString:@"http://192.168.1.123/demo.json"];
//2、创建网络请求
/*
cachePolicy 缓存策略
NSURLRequestUseProtocolCachePolicy = 0, //自动缓存策略
NSURLRequestReloadIgnoringLocalCacheData = 1, //每次都请求网络,无论本地是否存在缓存
NSURLRequestReturnCacheDataElseLoad = 2,//如果有缓存返回缓存,没有就加载网络
NSURLRequestReturnCacheDataDontLoad = 3,//如果有缓存返回缓存,没有也不加载网络
timeoutInterval 请求超时 默认超时时间是60 一般设置 10 - 20s
*/
NSURLRequest * request = [NSURLRequest requestWithURL:url cachePolicy:0 timeoutInterval:15];
//3、建立连接
//sendAsynchronousRequest 建立异步网络连接
//queue 可以传主队列,或全局队列
//[NSOperationQueue mainQueue] 不用调到主队列直接更新
//[[NSOperationQueue alloc] init] 则需要调回主线程更新UI
[NSURLConnection sendAsynchronousRequest:request queue:[[NSOperationQueue alloc] init] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
//response 服务器响应信息,一般下载时有用
//data 服务器返回的数据
//connectionError 网络请求错误
//服务器与客户端是以二进制流通讯的
NSLog(@"%@",data);
[data writeToFile:@"/Users/dahuan/Desktop/test" atomically:YES];
NSLog(@"%@",[NSThread currentThread]);
if (connectionError) {
NSLog(@"错误信息:%@",connectionError);
} else {
NSLog(@"响应信息:%@",response);
NSString * string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"%@",string);
[self.webView loadHTMLString:string baseURL:nil];
}
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
//更新UI
}];
}];
3、同步网络请求
NSURL * url = [NSURL URLWithString:@"http://192.168.1.123/demo.json"];
NSURLRequest * request = [NSURLRequest requestWithURL:url];
//同步网络请求
NSURLResponse * response = nil;
NSError * error = nil;
NSData * data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
NSString * string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"%@",string);
NSLog(@"%@",response);
4、NSURLConnection代理方法
self.data = [NSMutableData data];
NSString * urlString = @"http://192.168.1.123/把悲伤留给自己.mp3";
//NSString 中包含中文字符时转换为NSURL
urlString = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURL * url = [NSURL URLWithString:urlString];
NSURLRequest * request = [NSURLRequest requestWithURL:url];
NSURLConnection * connect = [NSURLConnection connectionWithRequest:request delegate:self];
//开启网络连接
[connect start];
//服务器返回响应信息1
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
NSLog(@"%@",response);
}
//接受数据(多次调用)2
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
[self.data appendData:data];
NSLog(@"%@",data);
}
//请求完成3
- (void)connectionDidFinishLoading:(NSURLConnection *)connection{
[self.data writeToFile:@"/Users/dahuan/Desktop/aaaaa.mp3" atomically:YES];
NSLog(@"网络请求完成");
}
iOS中的网络请求 和 网络监测的更多相关文章
- iOS中发送HTTP请求的方案
在iOS中,常见的发送HTTP请求的方案有 苹果原生(自带) NSURLConnection:用法简单,最古老最经典的一种方案 NSURLSession:功能比NSURLConnection更加强大, ...
- 网络请求以及网络请求下载图片的工具类 android开发java工具类
package cc.jiusan.www.utils; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; ...
- ios中判断当前手机的网络状态
typedef enum { NETWORK_TYPE_NONE= 0, NETWORK_TYPE_2G= 1, NETWORK_TYPE_3G= 2, NETWORK_TYP ...
- iOS中POST异步请求
POST异步请求(代理) 1.遵循<NSURLConnectionDataDelegate> @interface ViewController ()<NSURLConnection ...
- Android网络请求通信之Volley
一.Volley简介 Volley网络框架是Google公司在2013年发布的一款Android平台上的网络请求通信库.以下是对Volley的简单归纳. Volley的优点: 使网络通信更快.更简单. ...
- Android 网络请求详解
我们知道大多数的 Android 应用程序都是通过和服务器进行交互来获取数据的.如果使用 HTTP 协议来发送和接收网络数据,就免不了使用 HttpURLConnection 和 HttpClient ...
- App 组件化/模块化之路——如何封装网络请求框架
App 组件化/模块化之路——如何封装网络请求框架 在 App 开发中网络请求是每个开发者必备的开发库,也出现了许多优秀开源的网络请求库.例如 okhttp retrofit android-asyn ...
- CHNetRequest网络请求
Paste JSON as Code • quicktype 软件的使用 iOS开发:官方自带的JSON使用 JSON 数据解析 XML 数据解析 Plist 数据解析 NetRequest 网络数据 ...
- charles重发网络请求&模拟慢速网络&过滤网络请求
重发网络请求&模拟慢速网络&过滤网络请求 重发网络请求:后端调试的过程中,一直在客户端进行点点点比较麻烦,此时直接发送请求比较方便查看调试后的结果 模拟慢速网络:用户的网络不能一直是快 ...
随机推荐
- JS初识(着重讲解Date函数)
查看类型:typeof() 转换为int类型:parseInt() isNaN() 函数用于检查其参数是否是非数字值. NaN,是Not a Number的缩写.一种计算机用语.NaN 用于处理计算中 ...
- 51Nod 1405 树的距离之和 (树dp)
题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1405 中文题面不解释了,两次dfs,第一次自下向上,第二次自上 ...
- Odoo的Domain (一)
Odoo 的Domain:多个条件的列表. 条件:(字段名,操作符,值)三元式(列表或者元组) 字段名:当前模型的字段或者是通过点操作符访问的Many2one/Many2Many对象,当是Many2M ...
- 使用HTML5的十大原因
你难道还没有考虑使用HTML5? 当然我猜想你可能有自己的原因:它现在还没有被广泛的支持,在IE中不好使,或者你就是喜欢写比较严格的XHTML代码.HTML5是web开发世界的一次重大的改变,事实上不 ...
- android 工具类之图片加工
/** * 图片加工厂 * * @author way * */ public class ImageUtil { /** * 通过路径获取输入流 * * @param path * 路径 * @re ...
- 使用Vagrant在Windows下部署开发环境
做Web开发少不了要在本地搭建好开发环境,虽然说目前各种脚本都有对应的Windows版,甚至是一键安装包,但很多时候和Windows环境的相性并不是那么好,各麻烦的问题是实际部署的环境通常是Linux ...
- Windows性能计数器2
判断瓶颈 Ø 判断应用程序的问题 如果系统由于应用程序代码效率低下或者系统结构设计有缺陷而导致大量的上下文切换(context switches/sec显示的上下文切换次数太高)那么就会占用大量的系统 ...
- Sql中的union和union all的讲解
SQL UNION 和 UNION ALL操作符 UNION 操作符用于合并两个或多个 SELECT 语句的结果集. 请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列.列也必须拥有相 ...
- NFS错误Starting NFS quotas: Cannot register service: RPC: Unable to receive; errno=Connection refused
NFS报错一例 [root@bjs0- ~]# /etc/init.d/portreserve start Starting portreserve: ...
- Android调用相机并将照片存储到sd卡上
Android中实现拍照有两种方法,一种是调用系统自带的相机,然后使用其返回的照片数据. 还有一种是自己用Camera类和其他相关类实现相机功能,这种方法定制度比较高,洗染也比较复杂,一般平常的应用只 ...