2. TCP/UDP 网络通信实战
实验目的
学习在 Linux 应用层使用 C 语言进行 Socket 编程,掌握 TCP 面向连接通信与 UDP 无连接通信的区别,验证开发板与 PC 端(虚拟机)的数据双向收发能力。
硬件准备与特别说明
说明:本实验为纯应用层网络测试,无需配置底层引脚。请确保开发板与 Ubuntu 虚拟机处于同一局域网网段(假设开发板 IP 为 192.168.5.10,虚拟机 IP 为 192.168.5.x)。在实验前,请先执行 ping 192.168.5.10 确保网络互通。
源码获取与编译
请在网盘 软件资料/demo/base-demos/tcp_udp/src 目录下获取源码。
交叉编译(服务端): 执行 make CC=arm-linux-gnueabihf-gcc,生成供开发板运行的 tcp_server 和 udp_server,并传至板子 /root/ 目录。
本地编译(客户端): 在 Ubuntu 使用自带的 gcc 编译供电脑运行的客户端:
gcc tcp_client.c -o tcp_client_x86
gcc udp_client.c -o udp_client_x862.1 TCP 双向通信测试
开发板作为服务端(Server),Ubuntu 作为客户端(Client)。程序利用 fork() 创建父子进程分离收发,防止 recv() 阻塞导致无法键盘输入。
步骤 1:开发板启动服务端
cd /root
chmod +x tcp_server
./tcp_server 8888(终端提示 Waiting for client connection…)
步骤 2:Ubuntu 启动客户端
./tcp_client_x86 192.168.5.10 8888步骤 3:现象验证
在 Ubuntu 终端输入 hello 并回车,开发板终端成功打印 : hello。
在开发板终端输入 yes 并回车,Ubuntu 终端成功打印 [Recv from server 192.168.5.10:8888] : yes

正常现象: 终端交替显示双方互发的消息,IP 与端口号打印正确,无 0.0.0.0。按 Ctrl+C 退出。
2.2 UDP 双向通信测试
UDP 为无连接协议,必须先由客户端发送消息,服务端获取客户端地址后才能回信。若服务端直接回信,终端会提示 No client are available!。
步骤 1:开发板启动服务端
cd /root
chmod +x udp_server
./udp_server 9999步骤 2:Ubuntu 启动客户端
./udp_client_x86 192.168.5.10 9999步骤 3:现象验证(注意发送顺序)
客户端先发: 在 Ubuntu 终端输入 hello 并回车。开发板终端成功打印 [Recv from client 192.168.5.2:4154] : hello。
服务端回信: 此时在开发板终端输入 yes 并回车,Ubuntu 终端成功打印 [Recv from server 192.168.5.10:9999] : yes。
正常现象: 双向数据收发正常,终端准确回显对方的真实 IP 及端口号。按 Ctrl+C 可退出程序。
最后编辑:林晓燕 更新时间:2026-11-05 14:56