问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

C语言中UDP通信的实现方法详解

创作时间:
作者:
@小白创作中心

C语言中UDP通信的实现方法详解

引用
1
来源
1.
https://docs.pingcode.com/baike/1250593

在C语言中实现UDP通信需要使用套接字编程,通过创建套接字、绑定端口、发送和接收数据来实现。其中,创建套接字、绑定端口、发送和接收数据是实现UDP通信的核心步骤。下面将详细介绍如何在C语言中实现这些步骤。

一、创建套接字

创建套接字是实现UDP通信的第一步。套接字是一个网络通信的端点,通过它可以实现不同设备之间的数据传输。

int sockfd;

sockfd = socket(AF_INET, SOCK_DGRAM, 0);
if (sockfd < 0) {
    perror("socket creation failed");
    exit(EXIT_FAILURE);
}

在这个代码片段中,socket()函数创建了一个套接字,AF_INET表示使用IPv4地址,SOCK_DGRAM表示使用UDP协议。如果套接字创建失败,socket()函数将返回一个负值。

二、绑定端口

绑定端口是为了指定套接字使用的端口号,这样可以确保数据包能正确地发送到指定的端口。

struct sockaddr_in servaddr;

memset(&servaddr, 0, sizeof(servaddr));
// Filling server information
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = INADDR_ANY;
servaddr.sin_port = htons(PORT);
// Bind the socket with the server address
if (bind(sockfd, (const struct sockaddr *)&servaddr, sizeof(servaddr)) < 0) {
    perror("bind failed");
    exit(EXIT_FAILURE);
}

在这个代码片段中,struct sockaddr_in结构体用于存储服务器的信息,包括地址族、IP地址和端口号。bind()函数将套接字与指定的端口绑定起来。

三、发送数据

发送数据是UDP通信的重要部分,通过套接字将数据发送到指定的目的地址。

char *hello = "Hello from client";

struct sockaddr_in cliaddr;
memset(&cliaddr, 0, sizeof(cliaddr));
// Filling client information
cliaddr.sin_family = AF_INET;
cliaddr.sin_port = htons(PORT);
cliaddr.sin_addr.s_addr = INADDR_ANY;
int n, len;
n = sendto(sockfd, (const char *)hello, strlen(hello), MSG_CONFIRM, (const struct sockaddr *)&cliaddr, sizeof(cliaddr));
if (n < 0) {
    perror("sendto failed");
    exit(EXIT_FAILURE);
}

在这个代码片段中,sendto()函数用于将数据发送到指定的地址。MSG_CONFIRM表示确认数据已发送。

四、接收数据

接收数据是UDP通信的另一部分,通过套接字接收来自其他设备发送的数据。

char buffer[MAXLINE];
int n, len;
n = recvfrom(sockfd, (char *)buffer, MAXLINE, MSG_WAITALL, (struct sockaddr *)&cliaddr, &len);
buffer[n] = '\0';

在这个代码片段中,recvfrom()函数用于接收数据。MSG_WAITALL表示等待接收所有数据。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号