用C写一个UDP通信的代码
时间: 2023-12-07 08:05:26 浏览: 21
以下是一个使用C语言编写的简单UDP通信的代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#define PORT 8888
#define MAX_BUFFER_SIZE 1024
int main() {
int sockfd;
struct sockaddr_in server_addr, client_addr;
char buffer[MAX_BUFFER_SIZE];
// 创建UDP套接字
sockfd = socket(AF_INET, SOCK_DGRAM, 0);
if (sockfd < 0) {
perror("Error in socket");
exit(1);
}
// 设置服务器地址信息
memset(&server_addr, 0, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(PORT);
server_addr.sin_addr.s_addr = INADDR_ANY;
// 绑定套接字到本地地址和端口
if (bind(sockfd, (struct sockaddr*)&server_addr, sizeof(server_addr)) < 0) {
perror("Error in bind");
exit(1);
}
printf("UDP服务器启动,等待客户端连接...\n");
while(1) {
socklen_t client_len = sizeof(client_addr);
// 接收数据
int recv_len = recvfrom(sockfd, buffer, MAX_BUFFER_SIZE-1, 0,
(struct sockaddr*)&client_addr, &client_len);
if (recv_len < 0) {
perror("Error in recvfrom");
exit(1);
}
buffer[recv_len] = '\0';
printf("接收到来自%s:%d的消息:%s\n",
inet_ntoa(client_addr.sin_addr), ntohs(client_addr.sin_port), buffer);
// 发送数据
printf("请输入要发送的消息:");
fgets(buffer, MAX_BUFFER_SIZE, stdin);
sendto(sockfd, buffer, strlen(buffer), 0,
(struct sockaddr*)&client_addr, sizeof(client_addr));
}
// 关闭套接字
close(sockfd);
return 0;
}
```
这个代码创建了一个UDP套接字,并将其绑定到本地地址和端口。然后进入一个循环,在循环中接收来自客户端的数据,并打印出来。然后等待用户输入要发送的消息,并将消息发送给客户端。
请注意,这个示例是一个简单的演示,没有处理异常情况和错误处理。在实际使用中,你可能需要添加更多的逻辑来处理异常和错误。