理解Socket
- 人通过电话可以通信
- 程序之间通过Socket来通信
- 套接字就是程序间的电话机
- 协议就是程序与程序之间的通用语言:TCP与UDP协议
- Socket的英文原义是“孔”或“插座”。作为进程通信机制,取后一种意思。通常也称作“套接字”,用于描述IP地址和端口,是一个通信链的句柄(其实就是两个程序通信用的。)
- socket非常类似于电话插座。以一个电话网为例。电话的通话双方相当于相互通信的2个程序,电话号码就是IP地址。任何用户在通话之前,首先要占有一部电话机,相当于申请一个socket;同时要知道对方的号码,相当于对方有一个固定的socket。然后向对方拨号呼叫,相当于发出连接请求。对方加入在场并空闲,拿起电话话筒,双方就可以正式通话,相当于连接成功双方通话的过程,是一方向电话机发出信号和对方从电话机接收信号的过程,相当于向socket发送数据和从socket接收数据。通话结束后,一方挂起电话机相当于关闭socket,撤销连接。
端口的概念
- 在Internet上有很多这样的主机,这些主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开了一个socket,并绑定到一个端口上,不同的端口对应与不同的程序(应用程序)。
- 例如:http使用80端口,ftp使用21端口,smtp使用25端口
- 有两种类型:50000
- 流式socket(stream):是一种面向连接的socket,针对于面向连接的TCP服务应用,安全,但是效率低
- 数据报式socket(datagram):是一种无连接的socket,对应于无连接的UDP服务应用。不安全,顺序混乱,在接收端要分析重排及要求重发),但是效率高。
三次握手协议
- 你有空吗?//client
- 我有空 //server
- 我知道你有空了 //client