Socket概念
Socket英文翻译过来是插座,在计算机里的意思是套接字。
举例来说:我们浏览的网页都是http协议传输到浏览器的, 而http是基于Socket之上的。所以Socket是一套完成TCP、UDP协议的接口,相当于对TCP/IP协议的封装。
但是Socket本身并不是协议,而是一个调用接口(API),是一个针对TCP和UDP编程的接口,我们可以借助它建立TCP连接等。只有通过Socket,我们才能使用TCP/IP协议。
Socket的出现的原因:只是使程序员更方便地使用TCP/IP协议栈,是对TCP/IP协议的抽象,从而形成了我们知道的一些最基本的函数接口。
Socket和TCP/UDP位置关系
Socket链接方式
Socket链接有两种方式:长链接和短链接。
-
长链接:当数据发送完成后,Socket链接不断开,一直保留到异常或者是程序退出为止。
-
优点:不用每次去发起连接断开,速度上比短连接要快一点
-
缺点:对服务器的资源压力也要大些。
-
适用范围:长链接用的范围很广,比如游戏系统等,长链接一般还需要定时向服务器发数据,以保证socket链接畅通。当不通服务器时,需要重新开启链接。(比如Socket,Socket连接就是所谓的长连接,理论上客户端和服务器端一旦建立起连接将不会主动断掉;但是由于各种环境因素可能会是连接断开,比如:服务器端或客户端主机down了、网络故障、或两者之间长时间没有数据传输,网络防火墙可能会断开该连接以释放网络资源。所以当一个Socket连接中没有数据的传输,那么为了维持连接需要发送心跳消息。具体心跳消息格式是开发者自己定义的)
-
-
短链接:当一次数据发送完毕后,主动断开链接,每次发送数据都要一次链接、 断开操作。
-
优点:对服务器的资源占用相对来说比较小
-
缺点:因为每次都要重新链接,所以速度开销上也比较大
-
适用范围:对于那种不需要经常与服务器交互的情况下比较适用。(举例:http连接,http连接就是短连接,即客户端向服务器端发送一次请求,服务器端响应后连接即会断掉)
-
Socket建立网络连接的步骤
建立Socket连接至少需要一对套接字。其中一个运行于客户端 ClientSocket
,另一个运行于服务器端 ServerSocket
。
套接字(Socket),就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制。
套接字之间的连接过程分为三个步骤:服务器监听、客户端请求、连接确认。
-
服务器监听:服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态,等待客户端的连接请求。
-
客户端请求:指客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。
-
连接确认:当服务器端套接字监听到或者说接收到客户端套接字的连接请求时,就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,双方就正式建立连接。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。
具体代码实现自行搜索。