在C语言中实现UDP网络编程需要使用套接字(Socket)编程接口。下面是一个基本的UDP发送和接收示例:
- 创建套接字:
int sockfd;
sockfd = socket(AF_INET, SOCK_DGRAM, 0); //创建UDP套接字
if(sockfd < 0){
perror("socket error");
exit(1);
}
- 设定套接字地址和端口号:
struct sockaddr_in addr;
memset(&addr, 0, sizeof(addr));
addr.sin_family = AF_INET; //IPv4地址
addr.sin_port = htons(PORT); //端口号
addr.sin_addr.s_addr = INADDR_ANY; //接收任意IP地址
- 绑定套接字到地址:
int ret = bind(sockfd, (struct sockaddr*) &addr, sizeof(addr));
if(ret < 0){
perror("bind error");
exit(1);
}
- 发送数据:
struct sockaddr_in dest_addr;
memset(&dest_addr, 0, sizeof(dest_addr));
dest_addr.sin_family = AF_INET;
dest_addr.sin_port = htons(PORT);
dest_addr.sin_addr.s_addr = inet_addr("10.0.0.2"); //目标IP地址
char buffer[1024];
sprintf(buffer, "UDP Test"); //要发送的数据
sendto(sockfd, buffer, strlen(buffer), 0, (struct sockaddr*) &dest_addr, sizeof(dest_addr));
- 接收数据:
struct sockaddr_in src_addr;
socklen_t src_addr_len = sizeof(src_addr);
char buffer[1024];
int recv_len;
recv_len = recvfrom(sockfd, buffer, sizeof(buffer), 0, (struct sockaddr*) &src_addr, &src_addr_len);
if(recv_len < 0){
perror("recv error");
exit(1);
}
buffer[recv_len] = '\0';
printf("Received: %s\n", buffer);
关于如何处理UDP的异常情况和提高性能可靠性,可以参考相关网络编程书籍和资料。