欢迎来到Linux UDP编程的世界!如果你对网络编程感到陌生,或者想快速掌握无连接的通信方式,这篇文章就是为你准备的。UDP(用户数据报协议)是一种简单、高效的传输层协议,特别适合实时性要求高、允许少量丢包的场景,比如视频流、游戏和DNS查询。本文将通过详细的步骤和实例,带你理解并实践UDP通信的核心流程。
在Linux环境下,UDP编程主要使用以下socket函数族:
socket():创建套接字,指定协议族为AF_INET,类型为SOCK_DGRAM,协议为0(自动选择UDP)。bind():将套接字绑定到本地地址和端口,服务器端必须调用,客户端可选。sendto():向指定目标地址发送数据报。recvfrom():接收数据报,并获取发送方地址。close():关闭套接字。下面通过一个简单的回声示例来展示UDP客户端服务器的基本工作方式:服务器接收客户端消息,并原样返回。
#include #include #include #include #include int main() { int sockfd; struct sockaddr_in server_addr, client_addr; char buffer[1024]; socklen_t addr_len = sizeof(client_addr); // 1. 创建UDP套接字 sockfd = socket(AF_INET, SOCK_DGRAM, 0); // 2. 绑定地址和端口 memset(&server_addr, 0, sizeof(server_addr)); server_addr.sin_family = AF_INET; server_addr.sin_addr.s_addr = INADDR_ANY; server_addr.sin_port = htons(8888); bind(sockfd, (struct sockaddr*)&server_addr, sizeof(server_addr)); printf("UDP服务器启动,监听端口 8888..."); while (1) { // 3. 接收客户端消息 int n = recvfrom(sockfd, buffer, 1024, 0, (struct sockaddr*)&client_addr, &addr_len); buffer[n] = "�"; printf("收到来自 %s:%d 的消息: %s", inet_ntoa(client_addr.sin_addr), ntohs(client_addr.sin_port), buffer); // 4. 原样返回 sendto(sockfd, buffer, n, 0, (struct sockaddr*)&client_addr, addr_len); } close(sockfd); return 0;} #include #include #include #include #include int main() { int sockfd; struct sockaddr_in server_addr; char buffer[1024] = "Hello, UDP!"; socklen_t addr_len = sizeof(server_addr); // 1. 创建套接字 sockfd = socket(AF_INET, SOCK_DGRAM, 0); // 2. 设置服务器地址 memset(&server_addr, 0, sizeof(server_addr)); server_addr.sin_family = AF_INET; server_addr.sin_addr.s_addr = inet_addr("127.0.0.1"); server_addr.sin_port = htons(8888); // 3. 发送消息 sendto(sockfd, buffer, strlen(buffer), 0, (struct sockaddr*)&server_addr, addr_len); printf("发送消息到服务器: %s", buffer); // 4. 接收回声 int n = recvfrom(sockfd, buffer, 1024, 0, (struct sockaddr*)&server_addr, &addr_len); buffer[n] = "�"; printf("收到服务器回声: %s", buffer); close(sockfd); return 0;} 在UDP通信中,sendto()和recvfrom()是核心函数。它们直接操作数据报,无需建立连接。服务器通过bind()固定端口,而客户端可以省略bind(),由内核自动分配临时端口。注意:UDP报文可能丢失、乱序,因此应用层需要处理这些情况(如加入超时重传)。
在Linux终端中,使用gcc编译:
gcc server.c -o server./server gcc client.c -o client./client 先运行服务器,再运行客户端,即可看到通信效果。
本文带你走完了Linux UDP编程的全过程。通过简单的回声示例,你掌握了UDP套接字的创建、绑定、发送和接收。UDP虽然简单,但在实际应用中需结合具体场景设计可靠性机制。希望这篇教程能帮助你迈出网络编程的第一步!
关键词:Linux UDP编程、socket函数、UDP通信、客户端服务器
本文由主机测评网于2026-02-26发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/20260227272.html