用C写一下UDP通信的代码
时间: 2023-10-29 14:04:26 浏览: 24
下面是一个简单的UDP通信示例代码,基于C语言实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#define PORT 8888
#define BUFFER_SIZE 1024
int main() {
int sockfd, ret;
struct sockaddr_in serveraddr, clientaddr;
char buffer[BUFFER_SIZE];
// 创建UDP套接字
sockfd = socket(AF_INET, SOCK_DGRAM, 0);
if (sockfd < 0) {
perror("socket creation failed");
exit(EXIT_FAILURE);
}
// 绑定端口
memset(&serveraddr, 0, sizeof(serveraddr));
serveraddr.sin_family = AF_INET;
serveraddr.sin_addr.s_addr = INADDR_ANY;
serveraddr.sin_port = htons(PORT);
if (bind(sockfd, (const struct sockaddr *)&serveraddr, sizeof(serveraddr)) < 0) {
perror("bind failed");
exit(EXIT_FAILURE);
}
while (1) {
// 接收数据
memset(&clientaddr, 0, sizeof(clientaddr));
socklen_t len = sizeof(clientaddr);
ret = recvfrom(sockfd, buffer, BUFFER_SIZE, 0, (struct sockaddr *)&clientaddr, &len);
if (ret > 0) {
buffer[ret] = '\0';
printf("Received from %s:%d Data:%s\n", inet_ntoa(clientaddr.sin_addr), ntohs(clientaddr.sin_port), buffer);
// 发送数据
ret = sendto(sockfd, "Hello, World!", strlen("Hello, World!"), 0, (const struct sockaddr *)&clientaddr, len);
if (ret < 0) {
perror("sendto failed");
exit(EXIT_FAILURE);
}
}
}
// 关闭套接字
close(sockfd);
return 0;
}
```
在这个示例中,我们首先创建了一个UDP套接字,并将其绑定到本地的8888端口。然后进入一个死循环,不断接收来自客户端的数据并回复一个固定的消息。当我们运行这个代码后,就可以通过其他程序或终端连接到这个UDP服务器,进行数据的发送和接收。