使用 C 实现 udp服务端的监听函数,将接受到的数据保存到 char * buff中
时间: 2024-09-08 12:04:33 浏览: 83
UDP服务端和客户端代码 客户端发送数据 服务端接受数据
在C语言中,创建一个UDP服务器监听函数并接收数据通常涉及到使用socket API,特别是`recvfrom()`函数。以下是一个简单的示例,展示了如何创建一个UDP服务端,并将接收到的数据保存到字符数组中:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#define BUFFER_SIZE 1024
int main() {
int server_socket, client_socket;
struct sockaddr_in server_addr, client_addr;
socklen_t addr_len = sizeof(struct sockaddr_in);
char buffer[BUFFER_SIZE];
// 创建服务器套接字
if ((server_socket = socket(AF_INET, SOCK_DGRAM, 0)) == -1) {
perror("Error creating socket");
exit(1);
}
// 配置服务器地址 (IPv4, 端口)
memset(&server_addr, 0, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(SOME_PORT_NUMBER); // 替换为你要监听的端口号
server_addr.sin_addr.s_addr = htonl(INADDR_ANY); // 监听所有连接
// 绑定套接字到地址
if (bind(server_socket, (struct sockaddr *)&server_addr, sizeof(server_addr)) == -1) {
perror("Error binding socket");
close(server_socket);
exit(1);
}
printf("Server listening on port %d...\n", ntohs(server_addr.sin_port));
while (1) { // 永久循环等待客户端连接
// 接收来自客户端的数据
if (recvfrom(server_socket, buffer, BUFFER_SIZE, 0, (struct sockaddr *)&client_addr, &addr_len) == -1) {
perror("Error receiving data");
continue;
}
size_t len = strlen(buffer);
printf("Received from %s:%d: %.*s\n", inet_ntoa(client_addr.sin_addr), ntohs(client_addr.sin_port), len, buffer);
// 这里你可以选择对缓冲区做进一步处理,比如将其写入文件、数据库等
}
// 关闭服务器套接字
close(server_socket);
return 0;
}
```
在这个例子中,你需要替换`SOME_PORT_NUMBER`为你想要监听的端口号。注意,这个程序会一直运行,直到手动停止。每次有客户端连接并发送数据,它都会打印出消息并保存数据。
阅读全文