【linux系列知识】socket编程

socket编程

目录

socket编程

1、简单介绍

2、套接字

3、服务器端和客户端通信流程

TCP通信

UDP通信

4、TCP、UDP使用场景

5、本地套接字

1、简单介绍

     网络通信的函数接口,间接操作 tcp/udp ,封装了传输层协议。套接字——socket,必须成对存在

     socket通信必须有两端:服务器端(插座) 被动;客户端(插头) 主动

     socket编程——网络IO编程 本质:文件操作(内核缓冲区)创建一个套接字,得到的是文件描述符。读写操作。

2、套接字

      创建成功后,得到一个文件描述符fd,fd操作是一块内核缓冲区。

【linux系列知识】socket编程

网络数据流采用大端字节序,本地字节序采用小端。需要进行网络字节序和主机字节序的转换。

大端:低地址——高位;小端:低地址——低位。 

3、服务器端和客户端通信流程

TCP通信

server:(会有两个套接字,一个用于监听,一个用于通信)

  1. 创建套接字 socket();
  2. 绑定本地IP和端口 bind();
  3. 设置监听数 listen();
  4. 等待并接受连接请求 accept();
  5. 通信 read/write
  6. 关闭 close();

client:

  1. 创建套接字 socket();
  2. 连接服务器 connect();
  3. 通信 read/write
  4. 关闭 close();

UDP通信

server:(只有一个套接字)

  1. 创建套接字 socket();
  2. 绑定本地IP和端口 bind();
  3. 通信接受数据 recvfrom(); (会保存客户端的IP和port)
  4. 发送数据 sendto();
  5. 关闭套接字 close();

client:

  1. 创建套接字 socket();
  2. 通信发送数据:sendto();
  3. 接受数据:recvfrom();
  4. 关闭套接字:close();

4、TCP、UDP使用场景

tcp:对数据安全性要求高的时候:登录数据的传输、文件传输等(http协议:传输层协议——tcp)

udp:效率高,实时性要求比较高:视频聊天、直播、通话、录屏软件等

有实力的大公司:先用udp,再在应用层自定义协议做数据校验(比如qq)。

5、本地套接字

     需要用到一个套接字文件,完成没有血缘关系的进程间通信。文件格式:管道p,套接字S都是伪文件,磁盘显示大小为0,实际是内核缓冲区。

【linux系列知识】socket编程