Socket本质是网络通信编程接口(API),平时我们用到的high-level网络编程底层实现其实就是Socket。它面向的是两个传输层协议的编程,分别是UDP和TCP,UDP是不可靠传输协议(比如TFTP、TFTP、SNMP),TCP是可靠传输协议(比如HTTP、FTP、Telnet)。 这里不作赘述,有兴趣的可以查资料了解,推荐找网络原理的书看。
Chart
通信过程
首先服务端需要在某个端口上发起监听(listen
), 客户端需要知道服务端的IP
和Port
(端口号),接着向服务端发起socket连接请求。在
发起连接的时候,客户端也会带上本地的Port和IP,一般由系统去做这个事情。
如果没有出现问题的话,服务器接受(accept
)客户端的请求。之后同样创建一个socket套接字,绑定(bind
)到本地的端口,并设置它远程端点(client
)的IP
和Port
。服务器会继续创建一个新的socket来监听(listen
)客户端的请求。
在客户端,当一个连接被接受(accept
)时,socket就创建成功了,客户端使用这个socket和服务器进行数据传输。
服务端和客户端通过write or read
来进行通信。
socket连接是两个应用在网络中沟通的桥梁,socket绑定的端口号用来标识数据是被发送到指定的应用的。