在现代网络应用中,C++ UDP编程是一种高效、轻量级的通信方式。与TCP不同,UDP(User Datagram Protocol)不建立连接,直接发送数据包,适用于对实时性要求高但允许少量丢包的场景,如视频流、在线游戏和物联网设备通信。

UDP 是一种无连接的传输层协议。它不保证数据包的顺序、可靠性或完整性,但具有低延迟、开销小的优点。在 C++网络编程 中,使用 socket API 可以轻松实现 UDP 通信。
以下是一个简单的 UDP 服务端程序,它监听指定端口并回显收到的消息:
#include <iostream>#include <cstring>#include <sys/socket.h>#include <netinet/in.h>#include <unistd.h>int main() { // 创建UDP socket int server_fd = socket(AF_INET, SOCK_DGRAM, 0); if (server_fd < 0) { std::cerr << "Socket creation failed!\n"; return -1; } // 配置服务器地址 struct sockaddr_in server_addr; memset(&server_addr, 0, sizeof(server_addr)); server_addr.sin_family = AF_INET; server_addr.sin_port = htons(8080); // 监听8080端口 server_addr.sin_addr.s_addr = INADDR_ANY; // 接受任意IP // 绑定socket到地址 if (bind(server_fd, (struct sockaddr*)&server_addr, sizeof(server_addr)) < 0) { std::cerr << "Bind failed!\n"; close(server_fd); return -1; } std::cout << "UDP Server listening on port 8080...\n"; char buffer[1024]; struct sockaddr_in client_addr; socklen_t client_len = sizeof(client_addr); while (true) { // 接收数据 int n = recvfrom(server_fd, buffer, sizeof(buffer), 0, (struct sockaddr*)&client_addr, &client_len); if (n > 0) { buffer[n] = '\0'; std::cout << "Received from client: " << buffer << std::endl; // 回显数据 sendto(server_fd, buffer, n, 0, (struct sockaddr*)&client_addr, client_len); } } close(server_fd); return 0;}客户端向服务端发送消息并接收回显:
#include <iostream>#include <cstring>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <unistd.h>int main() { int client_fd = socket(AF_INET, SOCK_DGRAM, 0); if (client_fd < 0) { std::cerr << "Socket creation failed!\n"; return -1; } struct sockaddr_in server_addr; memset(&server_addr, 0, sizeof(server_addr)); server_addr.sin_family = AF_INET; server_addr.sin_port = htons(8080); inet_pton(AF_INET, "127.0.0.1", &server_addr.sin_addr); // 本地回环地址 const char* message = "Hello from UDP Client!"; sendto(client_fd, message, strlen(message), 0, (struct sockaddr*)&server_addr, sizeof(server_addr)); char buffer[1024]; socklen_t server_len = sizeof(server_addr); int n = recvfrom(client_fd, buffer, sizeof(buffer), 0, (struct sockaddr*)&server_addr, &server_len); if (n > 0) { buffer[n] = '\0'; std::cout << "Echo from server: " << buffer << std::endl; } close(client_fd); return 0;}将服务端代码保存为 udp_server.cpp,客户端代码保存为 udp_client.cpp,然后在 Linux 或 macOS 终端中执行:
g++ -o server udp_server.cppg++ -o client udp_client.cpp# 先运行服务端./server# 再打开新终端运行客户端./client<winsock2.h> 并初始化 WSAStartup。通过本教程,你已掌握 UDP通信 的基本原理和 socket编程教程 中的核心实现方法。无论是开发实时音视频应用,还是构建轻量级 IoT 通信系统,C++ UDP 编程都是不可或缺的技能。动手实践是掌握 C++网络编程 的最佳方式,快去尝试修改代码、扩展功能吧!
本文由主机测评网于2025-12-09发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/2025125106.html