iOS网络

来源:互联网 发布:大学宿舍淘宝店 编辑:程序博客网 时间:2024/06/05 02:43

NSURLConnection 是个Cocoa级别的API,构建在NSSream之上,设计时针对4歌常见的URL模式进行了优化支持,文件、HTTP、HTTPS与FTP。NSURLConnection支持同步和异步两种请求。


Game Kit不需要网络基础设施就能实现,能够实现点对点的通信。


Bonjou是Apple对零配置(zeroconf)网络的实现,通过名字、服务类型与域这几个元组来引用服务。


NSStream是一个Cocoa级别的API,构建在CFNetwork之上,作为NSRULConnection的基础,旨在完成底层的网络任务。NSStream可以支持使用telnet或SMTP等NSURLConnection不支持的协议进行通信。NSStream是 异步的 ,通过NSStreamDelegate实现通信更新。


CFNetwork API位于基础的BSD socket之上,与BSD socket之间的主要差别在于CFNetwork集成了运行循环。CFNetWork构建在Core Foundation层的CFSocket和CFStream API之上


HTTP协议

HTTP: (Hype Text Transfer Protocol)超文本传输协议

  • HTML定义了向文本添加样式的一种方式 > w3shool教程
  • HTTP定义了在服务端与客户端之间传输数据的一种方式
  • URL定义了在网络机器中定位唯一资源的一种方式

HTTP请求与相应

HTTP1.1
TCP连接.(三次握手)

Web服务器,浏览器,代理服务器

  1. 输入URL后,浏览器给Web服务器发送一个Request
  2. Web服务器接到Request后进行处理,生成相应的Response,然后发送给浏览器,浏览器解析Response中的HTML,我们就能看到网页了
  3. Request有可能是经过了代理服务器,最后才到达Web服务器的

代理服务器就是网络信息的中转站,其功能:
1. 提高访问速度,大多数的代理服务器都有缓存功能
2. 突破限制,翻墙
3. 隐藏身份

URL结构

schema://host[:port]/path/…/[?query-string][#anchor]

协议://主机名:[端口]/绝对路径/[?查询字符串1&查询字符串2][锚]

http://www.mytestsite.com/dorayo/tese/test.aspx?name=dorayo&x=true#stuff

默认端口号为80


绝对路径和查询字符串不可能包含空格、回车、换行符,因此URL通常会使用百分号进行编码。RFC规定了URL百分号编码的详细信息

请求内容

  1. 请求行
  2. 请求头
  3. 请求体
请求行 METHOD/path-to-resource HTTP/Version-number 请求头 Header-Name-1:Value Header-Name-1:Value 请求体 Optionalrequest body

* Method表示请求方法,比如“POST”,“GET”
* Path-to-resoure表示请求的资源
* HTTP/Version-number表示HTTP协议的版本号
* 当使用的是“GET”方法的时候,boby是为空的(默认方法为‘GET’)

HTTP是无状态的协议

请求体必须遵循客户端与服务端之间预先确定的数据编码,对应Web浏览器来说,这通常是表示单编码数据,对于移动端应用来说,该编码通常是XML或JSON数据。

响应内容

  1. 状态行
  2. 响应行
  3. 相应体
状态行 HTTP/Version-number status code message 响应头 Header-Name-1:Value Header-Name-1:Value 响应体 Optionalrequest body

* HTTP/version-number表示HTTP协议的版本号
* status code表示状态码
* message表示状态消息

状态码用来告诉HTTP客户端,HTTP服务器是否产生了预期的Response

HTTP协议和Connection:keep-alive的区别

HTTP是一个无状态的面向连接的协议,无状态并不代表HTTP不能TCP连接,更不能代表HTTP使用的是UDP协议(无连接)。

从HTTP1.1起,默认开启keep-alive,保持连接(默认时间为10分钟)。

Cocoa层iOS HTTP API

在URL加载系统中,有3个方式可以执行HTTP请求和接收响应

  • 同步 (线程会被阻塞)
  • 队列式异步 (创建以一个队列并放入后台线程执行)
  • 异步 (调用委托方法)

所有的URL加载请求方式都会用到这4类对象
1. NSURL
2. NSURLRequest
3. NSURLConnection
4. NSURLResponse


TCP链接、断开

重点 建立TCP链接(三次握手,数据段互换)

  1. 由客户端发送一个链接请求给服务器.( SYN = 1 , seq = client_isn)
  2. 服务器授予链接( SYN = 1 , seq = client_isn) ack = cline_isn +1
  3. 客户端确认,反馈给服务器( SYN = 0 , seq = client_isn + 1) ack = cline_isn + 1

断开TCP链接(四次握手)

  1. 客户端发起中断链接请求(FIN报文)
  2. 服务器发送ACK。(这时客户端进去FIN_WAIT状态,继续等待服务器的FIN报文)
  3. 客户端收到FIN报文后,就知道可以断开了
  4. 客户端给服务器发送ACK,告诉服务器要关闭了,进入TIME_WAIt状态,等待2秒无回复,则证明服务器已正常关闭,然后,客户端也可以关闭链接。
0 0
原创粉丝点击