使用UDP套接字的C语言程序在Linux系统上的简单示例。
在Linux环境下,UDP(用户数据报协议)是一种无连接的传输层协议,它提供了一种快速但不保证可靠交付的通信方式,与TCP不同,UDP不提供数据包的确认、重排序或错误检查机制,因此它在需要速度而非可靠性的场景中非常有用,比如实时视频流、在线游戏和广播等应用,使用C语言进行网络编程时,创建和管理UDP套接字(socket)是实现这些应用的基础。
UDP Socket编程基础
1. 引入必要的头文件
#include <stdio.h> // 标准输入输出库 #include <stdlib.h> // 标准库 #include <string.h> // 字符串操作函数 #include <unistd.h> // Unix标准函数定义 #include <sys/types.h> // 数据类型定义 #include <sys/socket.h> // 套接字接口 #include <netinet/in.h> // Internet地址族 #include <arpa/inet.h> // IP地址转换函数
2. 创建UDP套接字
int sockfd = socket(AF_INET, SOCK_DGRAM, 0); if (sockfd < 0) { perror("socket creation failed"); exit(EXIT_FAILURE); }
这里AF_INET
表示使用IPv4地址,SOCK_DGRAM
指定了这是一个UDP套接字。
3. 配置服务器地址结构
struct sockaddr_in server_addr; memset(&server_addr, 0, sizeof(server_addr)); server_addr.sin_family = AF_INET; server_addr.sin_port = htons(12345); // 端口号 server_addr.sin_addr.s_addr = inet_addr("127.0.0.1"); // IP地址,本地回环地址
4. 绑定套接字到指定的IP和端口
if (bind(sockfd, (const struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) { perror("bind failed"); close(sockfd); exit(EXIT_FAILURE); }
5. 接收和发送数据
接收数据:
char buffer[1024]; struct sockaddr_in client_addr; socklen_t len = sizeof(client_addr); int n = recvfrom(sockfd, buffer, sizeof(buffer), 0, (struct sockaddr *)&client_addr, &len); if (n < 0) { perror("recvfrom failed"); } else { buffer[n] = '