- Socket通信
1.1 简介
socket翻译为套接字,socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信。
通信流程
操作:
- 服务器根据地址类型(ipv4、ipv6)、socket类型、协议创建socket;
- 服务器为socket绑定对于的ip地址和端口号;
- 服务器监听端口号请求,接收用户发来的连接请求,此时服务器没有打开socket;
- 客户端,用户创建socket;
- 客户端,用户打开socket,并通过ip地址+端口号试图connect服务器的socket;
- 服务器接收到用户发来的socket连接请求,被动打开socket,开始接收客户端请求,直到用户返回连接信息。这时候服务器的socket进入阻塞状态,即accept()方法一直接收到客户端返回连接信息后才返回,然后开始接收下一个用户端请求;
- 客户端连接成果,开始向服务器端输入状态信息;
- 服务端accept()方法返回,连接成果;
- 客户端写入信息;
- 服务器端读取信息;
- 客户端关闭;
- 服务器端关闭;
https://www.cnblogs.com/Bw98blogs/p/7525543.html
1.2 基于tcp协议过程
- 客户端通信socket,socket = new Socket((ip)host, port端口);
创建socket(绑定本机随机端口,这个是系统自动完成);连接服务器connect与服务器进行io交互;关闭连接(主动,或者被动);
- 服务器端ServerSocket serverSocket=new ServerSocket(port端口);
服务器端:创建scoket,绑定端口;开始监听listen;等待并接受客户端连接请求,返回新的socket(accept);由新soket与客户端进行io交互;关闭连接(主动,或者被动);
- 三次握手
- 四次挥手
1 、进程之间的通信IPC分为以下几种:
1)消息传递(管道、FIFO、消息队列)
2)同步(互斥量、条件变量、读写锁、文件和写记录锁、信号量)
3)共享内存(匿名的和有名的)
本地唯一标识进程是PID,网络重用网络层的ip地址可以唯一标识网络重的主机,而传输层的“协议+端口”可以唯一标识主机重的应用程序,也就是进程。所以标识进程就是(地址、协议、端口),网络重的通信也是基于此进行网络中的通信和交互。
使用TCP/IP协议的应用程序,就通常采用应用编程接口,也就是套接字来实现,
1)bind()函数把一个地址族中的特定地址赋给socket。例如对应AF_INET、AF_INET6就是把一个ipv4或ipv6地址和端口号组合赋给socket。
2)listen():一个服务器,在调用socket()、bind()之后就会调用listen()来监听这个socket,如果客户端这时调用connect()发出连接请求,服务器端就会接收到这个请求。
3)accept():调用accept()函数取接收请求,这样连接就建立好了。之后就可以开始网络I/O操作了,即类同于普通文件的读写I/O操作。
4)close():在服务器与客户端建立连接之后,会进行一些读写操作,完成了读写操作就要关闭相应的socket描述字,好比操作完打开的文件要调用fclose关闭打开的文件。