外观
TCP 客户端示例
2026-05-27
概述
本文介绍如何在 睿擎工业开发平台 中创建并运行 TCP 客户端 示例工程。通过基于标准 POSIX Socket 接口的实现,演示了客户端连接远程服务器、利用 select 多路复用机制进行非阻塞数据接收以及周期性发送消息的完整流程。
TCP 客户端简介
TCP 客户端(TCP Client) 是网络编程中最基础的通信模式之一,它通过面向连接的流式协议,确保数据能够可靠、有序地在客户端与服务端之间传输。在嵌入式系统中,TCP 客户端通常用于向云端服务器上报传感器数据、接收远程控制指令或进行固件更新。
引脚连接
为保证代码与实际操作一致,本示例在 TL3576-EVM 开发板上,请使用网线将主机与开发板连接起来:

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

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

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

创建完成。

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

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

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

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

固化 APP

核心示例代码
工程中的核心代码位于 applications 目录下,提供 TCP 连接、发送、关闭以及接收处理等功能。下面详细分析:
- 初始化与连接建立
通过 gethostbyname() 解析服务器地址,创建 TCP 套接字并执行 connect 操作,建立与服务端的网络连接。
tcpclient_example.c
...
host = gethostbyname(_url);// 域名解析
if (host == RT_NULL)
{
rt_kprintf("Get host by name failed!\n");
return;
}
recv_data = rt_malloc(BUFSZ);
if (recv_data == RT_NULL)
{
rt_kprintf("No memory\n");
return;
}
if ((sock = socket(AF_INET, SOCK_STREAM, 0)) == -1)// 创建 TCP 套接字
{
rt_kprintf("Create socket error\n");
goto __exit;
}
// 设置套接字选项
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(_port);
server_addr.sin_addr = *((struct in_addr *)host->h_addr);
rt_memset(&(server_addr.sin_zero), 0, sizeof(server_addr.sin_zero));
if (connect(sock, (struct sockaddr *)&server_addr,
sizeof(struct sockaddr)) == -1)
{
rt_kprintf("Connect fail!\n");
goto __exit;
}
...- 非阻塞数据接收与指令处理
利用 select 机制对套接字进行轮询监听,实现非阻塞读取。支持通过输入特定指令(如 "q" 或 "Q")主动关闭连接。
tcpclient_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_received = recv(sock, recv_data, BUFSZ - 1, 0);// 接收数据
...
if ((rt_strcmp(recv_data, "q") == 0) ||(rt_strcmp(recv_data, "Q") == 0))
{
rt_kprintf("Got a 'q' or 'Q', close the socket.\n");
goto __exit;
}
}
...- 数据发送
每次接收到数据后,自动回复固定消息 send_data。
tcpclient_example.c
ret = send(sock, _send_data, rt_strlen(_send_data), 0);
if (ret < 0)
{
rt_kprintf("send error, close the socket.\n");
goto __exit;
}
else if (ret == 0)
{
rt_kprintf("Send warning, send function return 0.\n");
}运行示例
操作步骤
- 将程序下载到开发板
- 打开串口终端连接开发板
- 配置开发板网络
- 启动服务器程序
- 输入
tcpclient_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:启动客户端
输入命令:tcpclient_example 192.168.1.2 1234,启动 TCP 客户端并连接到指定的服务器。
预期结果:
- TCP 客户端成功连接到服务器
- 服务器发送数据后,客户端能正确接收并打印
- 客户端自动回复固定消息给服务器
RT-Thread 终端
msh />tcpclient_example 192.168.1.2 1234
msh />Received data = 456456
Received data = 456456
Received data = 456456
Received data = 456456
Received data = 456456sscom
[17:21:10.889]发→◇456456
[17:21:10.890]收←◆This is TCP Client from RT-Thread.
[17:21:12.603]发→◇456456
[17:21:12.606]收←◆This is TCP Client from RT-Thread.
[17:21:13.633]发→◇456456
[17:21:13.635]收←◆This is TCP Client from RT-Thread.
[17:21:14.698]发→◇456456
[17:21:14.699]收←◆This is TCP Client from RT-Thread.
[17:21:15.208]发→◇456456
[17:21:15.209]收←◆This is TCP Client from RT-Thread.