linux中c语言使用udp协议接收结构体
时间: 2023-01-29 18:27:27 浏览: 102
udp通信协议用c语言实现
4星 · 用户满意度95%
下面是使用 C 语言在 Linux 中使用 UDP 协议接收结构体的示例代码:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#define PORT 12345
#define BUF_SIZE 1024
struct my_struct {
int a;
char b[10];
double c;
};
int main(int argc, char *argv[]) {
int sockfd;
struct sockaddr_in server_addr;
struct sockaddr_in client_addr;
socklen_t client_addr_len;
ssize_t recv_len;
struct my_struct recv_struct;
// 创建套接字
sockfd = socket(AF_INET, SOCK_DGRAM, 0);
if (sockfd < 0) {
perror("socket");
exit(EXIT_FAILURE);
}
// 绑定套接字
memset(&server_addr, 0, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
server_addr.sin_port = htons(PORT);
if (bind(sockfd, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) {
perror("bind");
close(sockfd);
exit(EXIT_FAILURE);
}
while (1) {
// 接收数据
client_addr_len = sizeof(client_addr);
recv_len = recvfrom(sockfd, &recv_struct, sizeof(recv_struct), 0, (struct sockaddr *)&client_addr, &client_addr_len);
if (recv_len < 0) {
perror("recvfrom");
close(sockfd);
exit(EXIT_FAILURE);
}
// 打印接收到的结构体
printf("Received struct: a = %d, b = %s, c = %f\n", recv_struct.a, recv_struct.b, recv_struct.c);
}
close(sockfd);
return 0;
}
```
上面的代码创建了一个 UDP 套接字,并绑定到本地的 PORT 端口,然后不断接收数据并打印出来。
阅读全文