iOS之Socket编程最全总结

Socket简介:

    所谓socket,通常称为“套接字”,网络应用程序通过套接字向网络发送请求或者应答网络请求。socket通常用于描述IP地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机或者不同计算机之间的通信。

应用场景:

1、即时通讯

    特点:实时性,感觉不到延时和掉线,因为会监听socket的状态,如果掉线会进行重连。

2、服务器推送(web与服务器通信)

   客户端与服务器建立一个TCP连接,实现全双工通信(核心:客户端定时向服务器发送心跳                 包)

网络通信模型


iOS之Socket编程最全总结_第1张图片

Socket编程之TCP

iOS之Socket编程最全总结_第2张图片
iOS之Socket编程最全总结_第3张图片

    *面向连接,可靠传输(保证数据正确性,顺序性),用于传输大量数据(流模式)、速度慢,建立连接开销比较大(时间,系统资源)

    *流模式:在连接持续的过程中,基本上都是从同一个主机发出的,因此,需要保证数据是有序的到达。

    *三次握手(建立TCP连接,需要C和S发送三个包),四次挥手(TCP连接的断开需要发送4个包)


TCP通信流程图


iOS之Socket编程最全总结_第4张图片

Socket编程之UDP

    *UDP:非连接,不可靠传输,速度快,用于传输少量数据

    *只要知道接收端的ip和端口,任何主机都可以向接收端发送数据

UDP通信流程图


iOS之Socket编程最全总结_第5张图片

iOS之Socekt编程

    *BSDSocket(纯C)

        iOS系统基于unix,所以支持底层的BSD  Socket

    *CFSocket(纯C)

        对底层BSD Socket进行轻量级的封装

    *AsyncSocket(OC)

       使用OC封装的一个socket框架(支持TCP和UDP)

    *SocketRocket(OC)

        Square公司封装的一个WebSocket框架,用于原生和web APP和服务器通信


BSD Socket编程

    一套unix系统下的socket API(纯C),在Xcode中可以直接使用,

    Demo(简单实现C/S通信)地址:https://github.com/guodongyangwen/iOS-Socket.git

CFSocket

苹果对BSD Socket进行简单封装

主要使用的API:

   CFSocekt(用于建立连接),CFStream(用于读写数据)

Demo地址:https://github.com/guodongyangwen/iOS-Socket.git


CocoaAsyncSocket(目前比较常用)

 基于CFSocket进行OC的封装

 支持TCP和UDP

完整的回调函数(用于处理各种回调时间,连接成功,断开连接,收到数据等)

基于GCD

Demo(模拟一个即时通信的场景)地址:https://github.com/guodongyangwen/iOS-Socket.git

需要注意的问题:

    1、socket连接成功回调方法中主动调用:[self.socket readDataWithTimeout:-1 tag:0];,相当于主动添加一个读取请求,不然不会执行读取信息回调方法

    2、读取信息回调方法中,读取完信息后,主动调用一下[self.socket readDataWithTimeout:-1 tag:0];,读取完信息后,重新向队列中添加一个读取请求,

不然当收到信息后不会执行读取回调方法。


WebSocket

    *适用于web应用的可持久连接的全双工通讯协议,被称为“Web的TCP”,实现了浏览器和服务器的双向通信同样也适用于原生应用,协议本身使用“ws://URL”格式,是在标准http协议之上实现的,浏览器和服务器之间只需做一次握手操作后,就会创建一个快速通信通道。

    *解决问题:以前的服务器推送是通过浏览器轮询的方式进行,(时间间隔太长:不实时,体验差,太短: 消耗资源,服务器负载太大


SocketRocket:基于OC封装的一个WebSocket框架

SocketIO:也支持WebSocket,内部封装了SocektRocket

Demo(长连接实现服务器推送)地址:https://github.com/guodongyangwen/iOS-Socket.git


One More Thing:

CFNetwork:

   基于OS层BSDSocket封装,用于网络通信(纯C),早起的网络请求框架爱ASIHTTPRequest就是基于CFNetwork进行封装

主要API:

CFSocket:用于底层的通信

CFStream:用于数据的读写

Demo地址(图片请求):https://github.com/guodongyangwen/iOS-Socket.git

你可能感兴趣的:(iOS之Socket编程最全总结)