上一篇
欢迎来到Linux UDP网络编程教程!UDP(用户数据报协议)是一种无连接的传输层协议,常用于视频流、DNS查询等对实时性要求高的场景。本文将带你从零掌握Linux套接字编程,通过C语言网络编程实例,彻底搞懂UDP通信的核心流程。
Socket编程是网络通信的基石。UDP套接字使用SOCK_DGRAM类型。不同于TCP,UDP无需建立连接,直接发送数据包,因此编程模型更简洁。
// 创建套接字int sockfd = socket(AF_INET, SOCK_DGRAM, 0);// 绑定地址(服务器必须)struct sockaddr_in addr;addr.sin_family = AF_INET;addr.sin_port = htons(8888);addr.sin_addr.s_addr = INADDR_ANY;bind(sockfd, (struct sockaddr*)&addr, sizeof(addr));// 发送数据sendto(sockfd, buf, len, 0, (struct sockaddr*)&dest, sizeof(dest));// 接收数据recvfrom(sockfd, buf, sizeof(buf), 0, (struct sockaddr*)&src, &src_len);// 关闭close(sockfd); 以下是一个简单的回射服务器:客户端发送什么,服务器就原样返回。完整代码展示了UDP网络编程的整个生命周期。
// server.c#include #include #include #include int main() { int sockfd = socket(AF_INET, SOCK_DGRAM, 0); struct sockaddr_in srv, cli; srv.sin_family = AF_INET; srv.sin_port = htons(8888); srv.sin_addr.s_addr = INADDR_ANY; bind(sockfd, (struct sockaddr*)&srv, sizeof(srv)); char buf[1024]; socklen_t len = sizeof(cli); while (1) { int n = recvfrom(sockfd, buf, sizeof(buf)-1, 0, (struct sockaddr*)&cli, &len); buf[n] = " "; printf("收到: %s", buf); sendto(sockfd, buf, n, 0, (struct sockaddr*)&cli, len); } close(sockfd); return 0;} // client.c#include #include #include #include int main() { int sockfd = socket(AF_INET, SOCK_DGRAM, 0); struct sockaddr_in srv; srv.sin_family = AF_INET; srv.sin_port = htons(8888); inet_pton(AF_INET, "127.0.0.1", &srv.sin_addr); char buf[1024] = "Hello UDP"; sendto(sockfd, buf, strlen(buf), 0, (struct sockaddr*)&srv, sizeof(srv)); int n = recvfrom(sockfd, buf, sizeof(buf)-1, 0, NULL, NULL); buf[n] = " "; printf("服务器回射: %s", buf); close(sockfd); return 0;} setsockopt设置SO_REUSEADDRSO_BROADCAST选项通过本文的学习,你已经掌握了Linux套接字下的UDP网络编程核心知识。动手实践是巩固的关键,快在你的Linux上运行这些代码吧!
本文由主机测评网于2026-03-09发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:http://www.vpshk.cn/20260329923.html