Linux UDP socket 通信示例
前面你已经了解了 UDP 协议的基本原理和特点。这一节我们就来实战一下,手动写出 UDP 的客户端和服务端程序,掌握 UDP 通信在 Linux 下的实际用法。
UDP 通信模型回顾
UDP 是无连接的,因此服务端不需要像 TCP 那样 listen()
和 accept()
,客户端也无需 connect()
,双方可以通过 sendto()
和 recvfrom()
实现互发数据。
UDP 是一种面向无连接的 Socket 通信方式,和 TCP 传输数据流不同,UDP 传输的是数据包。由于 UDP 不需要事先在通信双方之间建立连接,因此也弱化了客户端(Client)和服务端(Server)的概念,把它们称为接收端和发送端更为合适。
在下面的示例中,我们将创建两个 UDP 程序,暂时仍称为 UDP Server 和 UDP Client,它们的工作流程如下所示。
UDP 服务端(Server):
- 创建一个 UDP socket
- 将 socket 与本机的 IP 地址绑定
- 等待客户端发送数据包(datagram packet)
- 处理数据包并给客户端发送一个回复
- 回到第 3 步循环
UDP 客户端(Client):
- 创建一个 UDP socket.
- 给服务端发送一条消息
- 等待服务端的回复
- 处理回复后回到第 2 步(如果需要)
- 关闭 socket,退出程序