外观
UDP 服务端示例
2026-05-28
概述
本文介绍如何在 睿擎工业开发平台 中创建并运行 UDP 服务端 示例工程,演示了如何通过标准 POSIX Socket 接口在嵌入式系统中搭建一个被动的 UDP 数据接收服务。
UDP 服务器简介
UDP 服务器(UDP Server) 是一种基于用户数据报协议(UDP)的被动通信服务。与 TCP 服务器不同,UDP 服务器不需要维持连接状态,它通过监听特定的端口,以“尽力而为”的方式接收来自任何 UDP 客户端发来的数据报。
引脚连接
为保证代码与实际操作一致,本示例在 TL3576-EVM 开发板上,请使用网线将主机与开发板连接起来:

构建与烧录
创建工程点击展开
依次点击 “文件” -> “新建” -> "RT-Thread RuiChing App 项目"。

在弹出新建向导中选择 开发版 、BSP: 、示例 、 调试器/下载器。选择好之后点击 “完成”。

点击 “完成” 后,等待工程创建完成。

创建完成。

构建工程点击展开
单击工程使工程进入 Active-Debug 模式。

点击工具栏上的构建按钮进行工程编译。

构建成功后,会显示构建成功的信息。

固件下载点击展开
固化驱动

固化 APP

核心示例代码
- 套接字初始化与绑定
服务器首先创建 UDP 数据报套接字(SOCK_DGRAM),并将端口绑定到本地的任意地址(INADDR_ANY),进入被动监听状态以等待客户端数据。
udpserver_example.c
if ((sock = socket(AF_INET, SOCK_DGRAM, 0)) == -1)
{
rt_kprintf("Create socket error\n");
goto __exit;
}
// 设置套接字选项
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(_port);
server_addr.sin_addr.s_addr = INADDR_ANY;
rt_memset(&(server_addr.sin_zero), 0, sizeof(server_addr.sin_zero));
if (bind(sock, (struct sockaddr *)&server_addr,
sizeof(struct sockaddr)) == -1)
{
rt_kprintf("Unable to bind\n");
goto __exit;
}
addr_len = sizeof(struct sockaddr);
rt_kprintf("UDPServer Waiting for client on port %d\n...", _port);- 非阻塞数据接收与指令处理
通过 select 机制对套接字进行轮询,实现非阻塞读取。服务器支持通过接收特定指令(如 "exit")来主动停止服务并释放资源。
udpserver_example.c
while (_is_running)
{
FD_ZERO(&readset);
FD_SET(sock, &readset);
if (select(sock + 1, &readset, RT_NULL, RT_NULL, &timeout) == 0)
continue;
bytes_read = recvfrom(sock, recv_data, BUFSZ - 1, 0,
(struct sockaddr *)&client_addr, &addr_len);
if (bytes_read < 0)
{
rt_kprintf("Received error, close the connect.\n");
goto __exit;
}
else if (bytes_read == 0)
{
rt_kprintf("Received warning, recv function return 0.\n");
continue;
}
else
{
recv_data[bytes_read] = '\0'; // 接收数据
rt_kprintf("Received data = %s\n", recv_data);
if (strcmp(recv_data, "exit") == 0)
{
goto __exit;
}
}
}运行示例
操作步骤
- 将程序下载到开发板
- 打开串口终端连接开发板
- 配置开发板网络
- 启动服务器程序
- 输入
udpserver_example命令
步骤 1:查看服务器 IP
在 windows cmd 中执行 ifconfig 命令,查看本机的 IP 地址、子网掩码及默认网关信息。
C:\Users\RTT>ipconfig
Windows IP 配置
以太网适配器 以太网 2:
连接特定的 DNS 后缀 . . . . . . . :
本地链接 IPv6 地址. . . . . . . . : fe80::cf98:15ca:965f:56b1%10
IPv4 地址 . . . . . . . . . . . . : 192.168.1.2
子网掩码 . . . . . . . . . . . . : 255.255.255.0
默认网关. . . . . . . . . . . . . : 192.168.1.1步骤 2:设置开发板 IP
在串口调试助手中,通过命令行 ifconfig e0 192.168.1.3 192.168.1.1 255.255.255.0 设置开发板的 IP 地址、默认网关和子网掩码,确保其与本机 IP 处于同一网段且网络配置一致。
msh />ifconfig e0 192.168.1.3 192.168.1.1 255.255.255.0
config : e0
IP addr: 192.168.1.3
Gateway: 192.168.1.1
netmask: 255.255.255.0步骤 3:启动服务器
启动服务器程序后,将其 IP 设置为本机 IP 并配置端口号,然后开启连接监听。

步骤 4:启动客户端
输入命令:udpserver_example 5001,启动 UDP 服务器,然后开启连接监听。
预期结果:
成功建立连接后,服务器能接收客户端发送的数据并回复固定消息。
RT-Thread 终端
msh />udpserver_example 5001
msh />[I/UDP] UDPServer Waiting for client on port 5001...
[D/UDP] Received data = 456456sscom
[11:25:30.439]发→◇456456