上一篇
UDP socket编程是Linux网络编程中的重要组成部分。UDP(User Datagram Protocol)是一种无连接的传输层协议,提供不可靠但高效的数据传输服务。本文将带你从零开始,掌握基于UDP的socket编程。
UDP是无连接的,发送数据前不需要建立连接,因此开销小,延迟低。它使用数据报套接字(SOCK_DGRAM),每个数据报都是独立的数据包,保留消息边界。但UDP不保证数据可靠传输,可能丢失、重复或乱序。
UDP编程主要涉及以下步骤:

sendto/recvfrom是UDP编程的核心函数。sendto用于发送数据报,recvfrom用于接收数据报,同时获取发送方地址。
下面是一个简单的UDP回声服务器和客户端示例。
#include#include #include #include #include #include #define PORT 8888#define BUFFER_SIZE 1024int main() { int sockfd; struct sockaddr_in server_addr, client_addr; char buffer[BUFFER_SIZE]; socklen_t addr_len = sizeof(client_addr); sockfd = socket(AF_INET, SOCK_DGRAM, 0); if (sockfd < 0) { perror("socket"); return 1; } 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(PORT); if (bind(sockfd, (struct sockaddr*)&server_addr, sizeof(server_addr)) < 0) { perror("bind"); close(sockfd); return 1; } puts("UDP server listening on port 8888"); while (1) { int n = recvfrom(sockfd, buffer, BUFFER_SIZE, 0, (struct sockaddr*)&client_addr, &addr_len); if (n > 0) { buffer[n] = 0; printf("Received from %s:%d: %s", inet_ntoa(client_addr.sin_addr), ntohs(client_addr.sin_port), buffer); sendto(sockfd, buffer, n, 0, (struct sockaddr*)&client_addr, addr_len); } } close(sockfd); return 0;}
#include#include #include #include #include #include #define SERVER_IP "127.0.0.1"#define PORT 8888#define BUFFER_SIZE 1024int main() { int sockfd; struct sockaddr_in server_addr; char buffer[BUFFER_SIZE] = "Hello, UDP!"; socklen_t addr_len = sizeof(server_addr); sockfd = socket(AF_INET, SOCK_DGRAM, 0); if (sockfd < 0) { perror("socket"); return 1; } memset(&server_addr, 0, sizeof(server_addr)); server_addr.sin_family = AF_INET; server_addr.sin_port = htons(PORT); inet_pton(AF_INET, SERVER_IP, &server_addr.sin_addr); sendto(sockfd, buffer, strlen(buffer), 0, (struct sockaddr*)&server_addr, addr_len); puts("Sent: Hello, UDP!"); int n = recvfrom(sockfd, buffer, BUFFER_SIZE, 0, (struct sockaddr*)&server_addr, &addr_len); if (n > 0) { buffer[n] = 0; printf("Received: %s", buffer); } close(sockfd); return 0;}
UDP编程需要注意数据报边界、丢包处理、MTU限制等。对于重要应用,需要在应用层实现可靠性机制。
总结:本文介绍了Linux环境下UDP socket编程的基础知识,包括函数使用和代码示例,希望对初学者有所帮助。掌握数据报套接字和sendto/recvfrom是进行UDP网络编程的关键。
本文由主机测评网于2026-02-21发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/20260226343.html