Socket
网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个Socket。Socket本质是编程接口(API),通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,可以用来实现不同计算机之间的通信。
应用程序通常通过"套接字"发出网络请求或者应答网络请求,Socket在建立网络连接时使用。连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,完成所需的会话。Internet上的主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务。
Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。
1、网络进程通信
如何标识网络中的一个进程呢?在本地可以通过进程PID来标识一个进程,但是在网络中这是行不通的。其实TCP/IP协议族已经帮我们解决了这个问题,网络层的IP地址可以唯一标识网络中的主机,而传输层的协议和端口可以唯一标识主机中的应用进程。这样利用三元组(IP地址,传输层协议,端口)就可以标识网络中的进程了。网络进程之间的通信就利用socket来完成。
2、通信过程
(1)服务器端初始化socket()
(2)绑定端口bind()
(3)监听端口listen()
(4)调用accept()阻塞,等待客户端连接
(5)客户端初始化一个socket()
(6)连接服务器connect()
(7)客户端/服务器端I/O读写
(8)关闭连接close()