纯 C 跨平台 UDP 收发测试程序完全满足你的要求可设置发送频率每秒多少包可设置发送包总数每个包包含帧号 毫秒级时间戳服务端自动计算延迟、丢包代码简洁、可直接编译运行UDP 服务端 客户端C 版1. UDP 服务端 udp_server.cpp功能接收数据、解析帧号 / 时间戳、计算延迟、检测丢包cpp运行#include iostream #include cstring #include sys/socket.h #include netinet/in.h #include unistd.h #include chrono using namespace std; using namespace chrono; // 数据包头部结构 struct PacketHeader { uint32_t frame_id; // 帧号 uint64_t timestamp; // 发送端毫秒时间戳 }; int main() { // 1. 创建 UDP socket int sockfd socket(AF_INET, SOCK_DGRAM, 0); if (sockfd 0) { perror(socket failed); return -1; } // 2. 绑定端口 sockaddr_in server_addr{}; server_addr.sin_family AF_INET; server_addr.sin_addr.s_addr INADDR_ANY; server_addr.sin_port htons(8888); if (bind(sockfd, (sockaddr*)server_addr, sizeof(server_addr)) 0) { perror(bind failed); close(sockfd); return -1; } cout UDP 服务端已启动监听端口 8888... endl; char buffer[1024]; sockaddr_in client_addr{}; socklen_t client_len sizeof(client_addr); int last_frame -1; while (true) { // 接收数据 ssize_t n recvfrom(sockfd, buffer, sizeof(buffer), 0, (sockaddr*)client_addr, client_len); if (n 0) continue; // 解析头部 PacketHeader header; memcpy(header, buffer, sizeof(PacketHeader)); // 接收时间戳毫秒 auto now_ms time_point_castmilliseconds(system_clock::now()).time_since_epoch().count(); double delay now_ms - header.timestamp; // 丢包检测 int lost header.frame_id - last_frame - 1; if (lost 0) { cout [丢包] 丢失 lost 包当前帧 header.frame_id endl; } last_frame header.frame_id; cout [接收] 帧号 header.frame_id | 延迟 delay ms | 包长 n 字节 endl; } close(sockfd); return 0; }2. UDP 客户端 udp_client.cpp功能可配置频率、发包总数、自动带帧号 时间戳cpp运行#include iostream #include cstring #include sys/socket.h #include netinet/in.h #include unistd.h #include chrono #include thread using namespace std; using namespace chrono; // 数据包头部 struct PacketHeader { uint32_t frame_id; uint64_t timestamp; }; // 可配置参数 #define SERVER_IP 127.0.0.1 #define SERVER_PORT 8888 #define SEND_FPS 10 // 每秒发送多少包 #define TOTAL_PACKETS 100 // 总共发送多少包 // int main() { // 1. 创建 UDP socket int sockfd socket(AF_INET, SOCK_DGRAM, 0); if (sockfd 0) { perror(socket failed); return -1; } // 2. 服务端地址 sockaddr_in server_addr{}; server_addr.sin_family AF_INET; server_addr.sin_port htons(SERVER_PORT); inet_pton(AF_INET, SERVER_IP, server_addr.sin_addr); // 发送间隔微秒 auto interval_us microseconds(1000000 / SEND_FPS); cout UDP 客户端启动 endl; cout 目标 SERVER_IP : SERVER_PORT endl; cout 发送频率 SEND_FPS 包/秒 endl; cout 总发包数 TOTAL_PACKETS endl endl; // 发送循环 for (int i 1; i TOTAL_PACKETS; i) { // 构造数据包 PacketHeader header; header.frame_id i; header.timestamp time_point_castmilliseconds(system_clock::now()).time_since_epoch().count(); // 发送 sendto(sockfd, header, sizeof(header), 0, (sockaddr*)server_addr, sizeof(server_addr)); cout [发送] 帧号 i | 时间戳 header.timestamp endl; // 控制发送频率 this_thread::sleep_for(interval_us); } cout \n发送完成 endl; close(sockfd); return 0; }3. 编译方法Linux /macOSbash运行g udp_server.cpp -o udp_server -pthread g udp_client.cpp -o udp_client -pthread4. 运行先运行服务端bash运行./udp_server再运行客户端bash运行./udp_client5. 可修改参数客户端cpp运行#define SEND_FPS 10 // 每秒发10包 #define TOTAL_PACKETS 100 // 共发100包想发高速率SEND_FPS 1000想发无限包把 for 循环改成 while (true)6. 功能说明帧号从 1 递增用于检测丢包时间戳毫秒级用于计算传输延迟服务端自动打印延迟、丢包、接收长度频率控制精确微秒级休眠总结一套C 跨平台 UDP 压测 / 测试工具支持发送频率 发包总数配置自带帧号毫秒时间戳服务端实时显示延迟、丢包、接收状态代码轻量、无第三方依赖、可直接用于项目测试