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_x86

2.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-10-22 09:41
最后编辑:林晓燕  更新时间:2026-11-05 14:56