【linux系列知识】socket编程
socket编程
目录
1、简单介绍
网络通信的函数接口,间接操作 tcp/udp ,封装了传输层协议。套接字——socket,必须成对存在。
socket通信必须有两端:服务器端(插座) 被动;客户端(插头) 主动
socket编程——网络IO编程 本质:文件操作(内核缓冲区)创建一个套接字,得到的是文件描述符。读写操作。
2、套接字
创建成功后,得到一个文件描述符fd,fd操作是一块内核缓冲区。
网络数据流采用大端字节序,本地字节序采用小端。需要进行网络字节序和主机字节序的转换。
大端:低地址——高位;小端:低地址——低位。
3、服务器端和客户端通信流程
TCP通信
server:(会有两个套接字,一个用于监听,一个用于通信)
- 创建套接字 socket();
- 绑定本地IP和端口 bind();
- 设置监听数 listen();
- 等待并接受连接请求 accept();
- 通信 read/write
- 关闭 close();
client:
- 创建套接字 socket();
- 连接服务器 connect();
- 通信 read/write
- 关闭 close();
UDP通信
server:(只有一个套接字)
- 创建套接字 socket();
- 绑定本地IP和端口 bind();
- 通信接受数据 recvfrom(); (会保存客户端的IP和port)
- 发送数据 sendto();
- 关闭套接字 close();
client:
- 创建套接字 socket();
- 通信发送数据:sendto();
- 接受数据:recvfrom();
- 关闭套接字:close();
4、TCP、UDP使用场景
tcp:对数据安全性要求高的时候:登录数据的传输、文件传输等(http协议:传输层协议——tcp)
udp:效率高,实时性要求比较高:视频聊天、直播、通话、录屏软件等
有实力的大公司:先用udp,再在应用层自定义协议做数据校验(比如qq)。
5、本地套接字
需要用到一个套接字文件,完成没有血缘关系的进程间通信。文件格式:管道p,套接字S都是伪文件,磁盘显示大小为0,实际是内核缓冲区。