首先,socket,套接字,这是一个东西,相关的术语一定要搞懂!曾就有一个面试案例:
讲讲Socket.
ooxx#$%^&*(
说的不错,再讲讲套接字.
...
坑爹呢?
术语是最容易给新人下套的东西,所以平常多了解一些相关术语会有很大的好处.
关于socket在面试中需要回答的东西:
什么是socket?
socket是系统提供的用于网络通信的方法,它描述了一个IP、端口对,知道对方的IP以及PORT就可以给对方发送消息,所以,Socket一定包含了通信的双发,即客户端(Client)与服务端(server)。
socket通信过程?
1)服务端利用Socket监听端口;(1024以下为系统端口,通常这个端口号都在1024之上)
2)客户端发起连接;
3)服务端返回信息,建立连接,开始通信;
4)客户端,服务端断开连接。
TCP/IP HTTP的区别?
首先应说明的是应用层面不同, 网络七层由下往上分别为物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。TCP--传输,IP--网络,HTTP--应用层
TCP/IP解决的是数据如何在网络中传输,HTTP解决的是如何包装数据,两者本身就不是一个东西.
HTTP作为应用层协议,底层依然是使用的TCP/IP作为传输协议,除了HTTP之外,FTP等等也是一个意思.想想浏览器里面都能输入什么?http://,ftp://
至于Socket,本质上是一套对于TCP/IP进行封装的接口(API,又是术语),通过Socket可以直接使用TCP/IP协议进行数据传输.
HTTP和Socket连接的区别?
Socket既然是对于TCP协议的封装接口,说白了也就是TCP连接(Socket也可以处理UDP连接,这里不展开讨论),那么TCP连接首先要做的就是三次交互,俗称三次握手:
1.客户端像服务端发包,等待服务器确认;
2.服务器向客户端发包;
3.客户端收到服务器包,建立连接
来个简单的场景举例,AB两人对话:
A:借点钱.(发包)
B:随便借.(回复)
A:谢谢啊.(建立连接)
俩人继续聊.(开始通信)
可以看看出,这3句话里并没有涉及到具体金额,究竟借多少,怎么借,那些都是在继续聊里来完成的.是一个持续性的连接过程,所以TCP连接属于长连接.
而HTTP连接则不同,首先,HTTP是建立在TCP协议之上的一种应用.客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接.发出请求,收到响应即为一次连接.换言之HTTP连接属于短连接.
同样来一个场景举例,AB对话:
A:借1000万.(请求)
B:玩蛋去.(响应,断开连接)
iOS开发中使用Socket
如果使用官方库的话那就是CFNetwork,三方库可以选择AsyncSocket
具体实现方式参照其他博文或者官方文档自行学习吧,这里不再展开讨论了