上一篇
在Linux环境下进行网络编程,UDP(User Datagram Protocol)是一种常用的传输层协议。它简单、高效,但不可靠。本文将从零开始,带你掌握UDP编程的核心步骤,即使你是编程新手也能轻松上手。
UDP是一种无连接的传输层协议,它提供了一种应用程序之间发送数据报的机制。与TCP不同,UDP不保证数据包的可靠传输,也不进行拥塞控制,因此它通常用于实时性要求高的场景,如视频会议、在线游戏等。
在Linux系统中,UDP编程主要使用socket API。基本步骤包括:创建socket、绑定地址(可选)、发送/接收数据、关闭socket。
使用socket()函数创建UDP套接字:
int sockfd = socket(AF_INET, SOCK_DGRAM, 0);if (sockfd < 0) { perror("socket creation failed"); exit(EXIT_FAILURE);} 服务器需要绑定一个固定的端口,客户端可以绑定也可以不绑定。使用bind()函数:
struct sockaddr_in servaddr;memset(&servaddr, 0, sizeof(servaddr));servaddr.sin_family = AF_INET;servaddr.sin_addr.s_addr = INADDR_ANY;servaddr.sin_port = htons(8888);if (bind(sockfd, (const struct sockaddr *)&servaddr, sizeof(servaddr)) < 0) { perror("bind failed"); exit(EXIT_FAILURE);} 使用sendto()发送数据到指定地址:
char buffer[] = "Hello UDP";struct sockaddr_in destaddr;destaddr.sin_family = AF_INET;destaddr.sin_port = htons(8888);inet_pton(AF_INET, "127.0.0.1", &destaddr.sin_addr);int n = sendto(sockfd, buffer, strlen(buffer), 0, (const struct sockaddr *)&destaddr, sizeof(destaddr));if (n < 0) { perror("sendto failed");} 使用recvfrom()接收数据,并获取发送方地址:
char buffer[1024];struct sockaddr_in cliaddr;socklen_t len = sizeof(cliaddr);int n = recvfrom(sockfd, buffer, sizeof(buffer), 0, (struct sockaddr *)&cliaddr, &len);if (n < 0) { perror("recvfrom failed");} else { buffer[n] = "�"; printf("Received: %s", buffer);} 通信结束后,调用close()关闭套接字:
close(sockfd); 下面是一个简单的UDP服务器和客户端示例:
// server.c#include #include #include #include #include int main() { int sockfd; struct sockaddr_in servaddr, cliaddr; char buffer[1024]; socklen_t len; sockfd = socket(AF_INET, SOCK_DGRAM, 0); memset(&servaddr, 0, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_addr.s_addr = INADDR_ANY; servaddr.sin_port = htons(8888); bind(sockfd, (const struct sockaddr *)&servaddr, sizeof(servaddr)); printf("UDP server listening on port 8888..."); len = sizeof(cliaddr); int n = recvfrom(sockfd, buffer, sizeof(buffer), 0, (struct sockaddr *)&cliaddr, &len); buffer[n] = "�"; printf("Client: %s", buffer); close(sockfd); return 0;} // client.c#include #include #include #include #include int main() { int sockfd; struct sockaddr_in servaddr; char *message = "Hello UDP server"; sockfd = socket(AF_INET, SOCK_DGRAM, 0); memset(&servaddr, 0, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_port = htons(8888); inet_pton(AF_INET, "127.0.0.1", &servaddr.sin_addr); sendto(sockfd, message, strlen(message), 0, (const struct sockaddr *)&servaddr, sizeof(servaddr)); printf("Message sent."); close(sockfd); return 0;} gcc server.c -o server即可。通过本文的学习,你应该已经掌握了Linux下UDP网络编程的基本方法。多动手实践,才能真正理解socket编程的精髓。
本文由主机测评网于2026-02-26发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/20260227405.html