iOS网络

发布时间:2026/10/20 14:19:16

iOS网络 -1001就是 ‌请求超时‌NSURLErrorTimedOutApp 在规定时间内没等到服务器响应。‌‌NSURLConnection同步异步与SSLhttp://qzc770707.blog.163.com/blog/static/3408275320105249566560/通常在iPhone里用NSURLConnection做url请求1.NSURLConnection同步与异步请求(1)异步请求NSMutableData* buf [[NSMutableData alloc] initWithLength:0];NSURLConnection* connection [[NSURLConnection alloc] initWithRequest:req delegate:self];// 收到响应时, 会触发- (void)connection:(NSURLConnection *)aConnection didReceiveResponse:(NSURLResponse *)aResponse;// 可以在里面判断返回结果, 或者处理返回的http头中的信息// 每收到一次数据, 会调用一次- (void)connection:(NSURLConnection *)aConn didReceiveData:(NSData *)data;// 因此一般来说,是- (void)connection:(NSURLConnection *)aConn didReceiveData:(NSData *)data{[buf appendData:data];}// buffer就是前面initWithRequest时同时声明的.// 网络错误时触发- (void)connection:(NSURLConnection *)aConn didFailWithError:(NSError *)error;// 全部数据接收完毕时触发- (void)connectionDidFinishLoading:(NSURLConnection *)aConn;(2)同步请求/ 初始化請求NSMutableURLRequest *request [[NSMutableURLRequest alloc] init];// 設置URL[request setURL:[NSURL URLWithString:urlStr]];// 設置HTTP方法[request setHTTPMethod:GET];// 發送同步請求, 這裡得returnData就是返回得數據楽NSData *returnData [NSURLConnection sendSynchronousRequest:requestreturningResponse:nil error:nil];// 釋放對象[request release];2. 注意head请求如果在head响应中继续请求下一个地址之后的响应和前一个响应对象的指针地址一样内容也一样。改为了get请求解决此问题。还没有更彻底的解决办法。另外设置setCachePolicy不起作用。3.ASIHTTPRequest.ASIHTTPRequest不是直接使用的NSURLConnection.ASIHTTPRequest is an easy to use wrapper around the CFNetwork API that makes some of the more tedious aspects of communicating with web servers easier. It is written in Objective-C and works in both Mac OS X and iPhone applications.http://allseeing-i.com/ASIHTTPRequest/http://www.cnblogs.com/chen1987lei/archive/2011/06/07/2074636.htmlASIHttpRequest学习笔记1创建队列、下载请求、断点续传、解压缩http://ryan.easymorse.com/?p12ASIHTTPRequest系列(二)文件下载http://blog.csdn.net/kmyhy/archive/2011/06/03/6524916.aspx可能文件名下载文件的名称存在了头Content-Disposition中在请求头响应中取得文件名重新设置显示给用户的名称及request setDownloadDestinationPath:downloadDestPathName];但不要重新设置setTemporaryFileDownloadPath必须在请求下载开始前设置setTemporaryFileDownloadPath若请求开始后再重新设置将导致ASIHTTPRequest找不到已下载的临时文件。可以将下载地址作为临时文件名并且这样能更好的确保唯一性。队列异步请求中中获取或识别不同request小技巧a可以设置一个上下文userInfo到request对象中当请求响应完后可以通过访问request对象的userInfo获取里面的信息b为每一个请求实例设置不同的setDidFinishSelector / setDidFailSelector的回调方法c继承ASIHTTPRequest重写requestFinished: 与 failWithProblem:方法安全的内存回收建议request并没有retain delegate所以若在没有请求完时候释放此delegate需要在dealloc方法里先取消所有请求再释放请求实例如- (void)dealloc { [request clearDelegatesAndCancel]; [request release]; ... [super dealloc]; }升级到iOS5后ASIHttpRequest库可能出现的问题及解决方法ASIAuthenticationDialog这个内置对话框在网络有代理的情况下出现然后无论点cancle或是login都不能dismiss。在4.3的SDK中没问题在5.0的SDK中会在Console中看到输出Unbalanced calls to begin/end appearance transitions for ASIAutorotatingViewController:详见 http://sabolasi.iteye.com/blog/1296218http://www.cocoachina.com/iphonedev/sdk/2011/1021/3403.html或者到http://allseeing-i.com/ASIHTTPRequest/下载最新的版本。3.1 ASIHTTPRequest 响应数据的编码ASIHTTPRequest会尝试从头部的Content-Type字段读取接收到的数据的文本编码如果它发现一个文本编码它会设置字段responseEncoding为一个合适的 NSStringEncoding。如果它在头部字段没有发现一个文本编码它会使用字段defaultResponseEncoding的默认值这个字段默认值为NSISOLatin1StringEncoding。http://blog.csdn.net/workhardupc100/article/details/69416853.2.ASIHTTPRequest, 请求的其它特性iOS4中当应用后台运行时仍然请求数据[request setShouldContinueWhenAppEntersBackground:YES ];是否有网络请求[ ASIHTTPRequest isNetworkInUse ]是否显示网络请求信息在status bar上[ ASIHTTPRequest setShouldUpdateNetworkActivityIndicator:NO ];设置请求超时时设置重试的次数[ request setNumberOfTimesToRetryOnTimeout:2 ];KeepAlive的支持// Set the amount of time to hang on to a persistent connection before it should expire to 2 minutes[ request setPersistentConnectionTimeoutSeconds:120 ];// Disable persistent connections entirely[ request setShouldAttemptPersistentConnection:NO ];ASIFormDataRequest addPostValue内部默认对值做url编码所以不要在添加之前做url编码。函数内容如下NSString *newString [NSMakeCollectable(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)string, NULL, CFSTR(:/?#[]!$ ()*,;\%{}|\\^~), CFStringConvertNSStringEncodingToEncoding([self stringEncoding]))) autorelease];3.3设置Cookie使用自己保存cookie的方式。ASI会自动把头键的首字母大写。[request setUseCookiePersistence:NO];// [ASIHTTPRequest setSessionCookies:nil];[request addRequestHeader:cookie value:cookie];3.4 ASIHTTPRequest默认超时时间// The default number of seconds to use for a timeoutstatic NSTimeInterval defaultTimeOutSeconds 10;3.5在requestFinished中取原请求地址要使用[request originUrl]因为当跳转时它内部会处理[request url]返回的是最后跳转的地址了。3.6ASIHTTPRequest.m中- (BOOL)willRedirect函数中// Perhaps there are other headers we should be preserving, but its hard to know what we need to keep and what to throw away.上面这段话对应的代码在跳转时扔掉了大部分头所以写了一个类别重写这个方法注掉了这段扔头的代码使全部头都带上。ASIHTTPRequest.m4.iPhone 检查网络状态iPhone 检查网络状态_过滤或监测您iphone的全部网络活动-CSDN博客5.MKNetWorKitMKNetWorkKit的出现给开发者带来了福音它吸取了ASIHttpRequest与AFNetWorking的优点并加入了自己特有的功能。6.NSURL构造时如果地址串上有unicode字符编码结果为nil。7.统计iPhone系统网络流量iPhone不能监测其他程序流量只能监测本app系统有相关api但是是私有。SCNetWorkConnectCopyStatistice 有一种方法是自己建立一个网络代理服务器你的应用程序要做的就是下载一个配置文件这个配置文件的功能就是更改本地的DNS地址指向自己的网络代理服务器。然后所有的流量都是在网络代理服务器上进行统计客户端只需要从你的DNS服务器上获取数据就行了其它的常规方法好像不行至少目前ios不支持因为你的应用程序是不能一直在后台运行的。越狱后理论上可以实现,监听端口就可以了吧?向运营商查询看到一款名叫彩虹流量的软件, ‎iPhone 版“Today” - App Store他知道每个应用所使用的流量的,同时还可以对数据进行压缩.国外 Onavo 的模仿品是的用的代理数据经他服务器压缩过。其实移动平台上的网络访问大都用gzip压缩过他再压缩压缩率不会太高甚至不做优化会使用网络访问变慢。8.ASIHTTPRequest进度条ASIHTTPRequest提供两种进度条显示简单进度条和精确进度条使用showAccurateProgress来控制。为一个request设置showAccurateProgress只会对该request有效。为一个队列设置 showAccurateProgress会影响队列里所有的request。使用简单进度条时进度条只会在一个request完成时才更新。对于单个request这意味着你只有两个进度状态0%和100%。对于一个有5个request的队列 来说有五个状态0%25%50%75%100%每个request完成时进度条增长一次。使用精确进度条时每当字节被上传或下载时进度条都会更新。它适用于上传/下载大块数据的请求并且会更好的显示已经发送/接收的数据量。追踪上传会轻微降低界面效率因为进度delegate一般是UIProgressViews 或NSProgressIndicators会更频繁地重绘。追踪下载会更影响界面效率因为队列会先为每个GET型request进行HEAD请求以便统计总下载量。简单进度条showAccurateProgress NO是ASINetworkQueue的默认值适用于大量小数据请求。精确进度条showAccurateProgress YES是以同步方式执行的ASIHTTPRequest的默认值。推荐对下载大文件的队列使用精确进度条但是要避免对大量小数据请求使用精确进度条。9.ASINetworkQueueimgDownloadNetworkQueue_[[ASINetworkQueue alloc] init];imgDownloadNetworkQueue_.delegateself;[imgDownloadNetworkQueue_ setMaxConcurrentOperationCount:1];[imgDownloadNetworkQueue_ setShouldCancelAllRequestsOnFailure:NO];imgDownloadNetworkQueue_.requestDidFinishSelectorselector(requestFinished:);imgDownloadNetworkQueue_.requestDidFailSelectorselector(requestFailed:);注意不要给ASINetworkQueue中的单个request设置delegate而是设置ASINetworkQueue的requestDidFinishSelector和requestDidFailSelector。在销毁时调用[imgDownloadNetworkQueue_ reset];[imgDownloadNetworkQueue_ release];不会出现内存问题。9.蓝牙苹果的官方api是不支持非ios设备与ios设备的连接。不支持文件传输。官方的开发需要使用Gamekit.framework#import GameKit/GameKit.h10.AsyncSocketiphone的标准推荐CFNetwork C库编程.但是编程比较烦躁AsyncSocket 官方网站:https://github.com/robbiehanson/CocoaAsyncSocket10.1一些网络的基本概念同步指的是发送方不等接收方响应便接着发下个数据包的通信方式异步指发送方发出数据后等收到接收方发回的响应才发下一个数据包的通信方式阻塞指调用某函数时直到该函数完成操作才返回否则一直阻塞在该调用上非阻塞指调用某操作时不管操作是否成功都立即返回而不会挂在该操作上CAsyncSocket属于异步非阻塞类CSocket是MFC在CAsyncSocket基础上派生的一个同步阻塞Socket的封装类.在didReadData事件里使用[socket readDataWithTimeout:-1 tag:0];就可以一直监听下去了。当服务端主动关闭时,会依次调用- (void)onSocket:(AsyncSocket *)sock willDisconnectWithError:(NSError *)err;- (void)onSocketDidDisconnect:(AsyncSocket *)sock;11. ASIHTTPRequest的长连接短连接ASIHTTPRequest的GET方式采用的是connection keepalive长连接方式POST方式采用的是connection close。ASIHTTPRequest里面的Timeout的概念是例如若10秒服务器没有响应客户端结束当前tcp连接。request.shouldAttemptPersistentConnection NO;设置为不支持长连接HTTP持久连接HTTP persistent connection也称作HTTP keep-alive或HTTP connection reuse是使用同一个TCP连接来发送和接收多个HTTP请求/应答而不是为每一个新的请求/应答打开新的连接的方法。在请求服务没有及时响应的时候客户端会在同一个tcp连接中再次请求服务器。导致的结果就是客户端的现象请求了一次。得到了一次response。 服务端收到两次请求给出了一次返回。这里的“没有及时响应”不是ASIHTTPRequest里面的Timeout的概念应该是persistentConnectionTimeoutSeconds这里是指服务端没有立刻发送确认ack的包。12.
延伸阅读

更多相关文章

2026/10/20 14:14:15

VXLAN生产落地三大核心:VNI规划、BGP EVPN时序、隧道韧性设计

1. 为什么“VXLAN详解(三)”这个标题本身就在传递关键信号看到“VXLAN详解(三)”,有经验的网络工程师第一反应不是去点开看内容,而是下意识地翻出前两篇——这已经不是单纯的技术文档编号,而是一…

2026/10/20 14:14:15

十分钟搭建个人AI知识库:RAG全流程实战指南

【RAG知识库】十分钟带你搭建属于你的个人AI知识库最近总有朋友问我,手机里存了几百篇技术文章、工作文档、读书笔记,真到要用的时候却怎么也翻不出来。也有人把一堆 PDF 丢给大模型让它总结,结果它回答得像模像样,但关键数据全是…

2026/10/20 14:14:15

Kafka Manager 1.3.3.22部署实战:从环境配置到避坑指南

简介:Kafka Manager是雅虎开源的一款Kafka集群管理工具,提供集群监控、Topic管理、分区均衡、消费者Offset查看等能力。这份适用于Linux环境的Kafka-Manager-1.3.3.22已编译压缩包,面向大数据运维工程师、Kafka使用与学习者,解决K…

2026/10/20 15:30:04

iOS CoreLocation实战:从权限到后台定位的全链路指南

做iOS开发这些年,凡是涉及到位置功能的项目,基本都绕不开CoreLocation。无论是“获取当前经纬度”“判断用户所在城市”,还是后台持续上报位置,原生框架CoreLocation始终是最底层的那个环节。Swift版本写定位模块,比Ob…

2026/10/20 15:30:04

大一新生必看:大学四年规划、绩点提升与避坑指南

大学四年怎么过才不会后悔,这是几乎所有大一新生都想过的问题。但说实话,我刚进大学那会儿,根本没人给我讲这些,全靠自己踩坑踩出来的经验。今天我把这些心得整理出来,既是写给当年那个懵懵懂懂的自己,也希…

2026/10/20 15:30:04

IS-IS缺省路由全解析:从ATT位到路由泄露的实战指南

很多人一看到“IS-IS 缺省路由”这几个字,第一反应是:这不就是配一条 default 路由嘛,静态路由里 /0 指一下就完事了。但真在 IS-IS 网络里动过手的人都知道,IS-IS 的缺省路由是个“有脾气”的东西——它牵扯到 Level-1/Level-2 层…

2026/10/20 15:30:04

别把LLM当万能:Skills才是AI应用的最小单元

2. 别把 LLM 当成一切:重新理解 AI 应用的最小单元过去一年我见过太多团队栽在同一个坑里:动不动就上复杂的 Agent 框架,又是多智能体编排,又是记忆系统,结果项目卡在调试阶段动弹不得。原因其实很简单——大家把大语言…

2026/10/20 15:30:03

2026年AI检测算法升级,降AI工具如何从词句替换走向语义级重建?

这两年在写作圈和学术圈里,降AI工具一直处于相当微妙的位置。一边是各种平台对AIGC痕迹的识别越来越紧,另一边是不少写作者确实需要借助工具来润色、梳理逻辑、降低机器感。2026年的算法升级消息放出来之后,我身边好几个做论文辅导、期刊投稿…

2026/10/20 15:25:03

从零搭建PPT自动生成工具:Python实战与架构设计

1. 从零搭建一个"PPT大师":为什么我要自己造这个轮子做技术分享、写项目复盘、给团队做培训,绕不开的一件事就是做PPT。我粗略算过,过去一年我至少做了四十多份演示文稿,平均每份从构思到定稿要花掉三到五个小时。最要命…

2026/10/19 18:06:35

金融AI落地指南:从调研报告到技术选型与工程实践

简介:这份PDF报告聚焦2025年金融服务业中国AI现状与趋势,面向金融科技从业者、AI战略规划人员及关注行业数字化转型的研究者,帮助读者把握生成式AI在银行、支付、交易等场景中的落地路径与投资方向。资源包内含1个PDF文件,大小约1…

2026/10/20 1:05:37

单片机C运行时从启动到多任务:中断安全与共享资源冲突

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:05:37

GCC编译四步详解:预处理、编译、汇编、链接实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:05:37

FIW线是什么?FEP注塑线与普通氟塑料线的区别及应用指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑