外观
TCP 客户端
2025-10-29
概述
本示例演示如何在 RC3506 开发板上实现 TCP 客户端通信功能。通过开发板作为 TCP 客户端与服务器交互,实现数据的接收与发送操作,帮助用户掌握 TCP 协议的标准通信流程及本平台下的网络编程方法。
TCP 客户端
开发板作为 TCP 客户端与服务器建立通信后,会将接收到的消息打印输出,并自动回复固定消息 “This is TCP Client from RT-Thread.”。
创建工程点击展开
依次点击 “文件” -> “新建” -> "RT-Thread RuiChing App 项目"。

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

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

创建完成。

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

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

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

固件下载点击展开
固化设备树

固化 APP

核心示例代码
工程中的核心代码位于 applications 目录下,提供 TCP 连接、发送、关闭以及接收处理等功能。下面详细分析:
初始化与连接建立
使用
gethostbyname()进行域名解析,创建 TCP 套接字并连接到服务器。applications/tcpclient.c... host = gethostbyname(url); // 进行域名解析 if (host == RT_NULL) { LOG_E("Get host by name failed!"); return; } recv_data = rt_malloc(BUFSZ); if (recv_data == RT_NULL) { LOG_E("No memory"); return; } if ((sock = socket(AF_INET, SOCK_STREAM, 0)) == -1) // 创建 TCP 套接字 { LOG_E("Create socket error"); 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) { LOG_E("Connect fail!"); goto __exit; } ...数据接收与处理
使用
select实现非阻塞 IO,避免线程长时间阻塞。收到数据后判断是否为退出指令。applications/tcpclient.c... while (is_running) { FD_ZERO(&readset); FD_SET(sock, &readset); /* Wait for read */ if (select(sock + 1, &readset, RT_NULL, RT_NULL, &timeout) == 0) // 使用 select 监听套接字 continue; bytes_received = recv(sock, recv_data, BUFSZ - 1, 0); if (bytes_received < 0) { LOG_E("Received error, close the socket."); goto __exit; } ....数据发送
每次接收到数据后,自动回复固定消息
send_data。applications/tcpclient.cret = send(sock, send_data, rt_strlen(send_data), 0); if (ret < 0) { LOG_I("send error, close the socket."); goto __exit; } else if (ret == 0) { LOG_W("Send warning, send function return 0."); }
运行示例
操作步骤
- 将程序下载到开发板
- 配置开发板网络
- 启动服务器程序
- 在开发板上运行 TCP 客户端程序
步骤 1:查看服务器 IP
在 windows cmd 中执行 ifconfig 命令,查看本机的 IP 地址、子网掩码及默认网关信息。
C:\Users\RTT>ipconfig
Windows IP 配置
以太网适配器 以太网:
连接特定的 DNS 后缀 . . . . . . . :
本地链接 IPv6 地址. . . . . . . . : fe80::a910:b54e:fcf2:aacd%6
IPv4 地址 . . . . . . . . . . . . : 10.23.8.146
子网掩码 . . . . . . . . . . . . : 255.255.255.0
默认网关. . . . . . . . . . . . . : 10.23.8.254
无线局域网适配器 WLAN:
媒体状态 . . . . . . . . . . . . : 媒体已断开连接
连接特定的 DNS 后缀 . . . . . . . : Lan设置开发板 IP
在串口调试助手中,通过命令行
ifconfig e0 10.23.8.38 10.23.8.254 255.255.255.0设置开发板的 IP 地址、默认网关和子网掩码,确保其与本机 IP 处于同一网段且网络配置一致。msh />ifconfig e0 10.23.8.38 10.23.8.254 255.255.255.0 config : e0 IP addr: 10.23.8.38 Gateway: 10.23.8.254 netmask: 255.255.255.0
步骤 3:启动服务器
启动服务器程序后,将其 IP 设置为本机 IP 并配置端口号,然后开启连接监听。

步骤 4:启动客户端
输入命令:tcpclient -h 10.23.8.146 -p 5000,启动 TCP 客户端并连接到指定的服务器。
预期结果:
TCP 客户端成功连接到服务器
服务器发送数据后,客户端能正确接收并打印
客户端自动回复固定消息给服务器
rtt 终端msh />tcpclient -h 10.23.8.146 -p 5000 [D/TCP] Received data = abcdefg [D/TCP] Received data = abcdefgsscom[16:35:45.604]发→◇abcdefg□ [16:35:45.605]收←◆This is TCP Client from RT-Thread. [16:35:46.779]收←◆abcdefg [16:35:46.780]收←◆This is TCP Client from RT-Thread.
