之前小沃写过关于go语言获取udp的代码,感觉延时还是比较高的,所以这次写一个用C实现的,用来接收UDP数据包,同时打印到终端,话不多说,上代码:
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netdb.h>
#define PORT 53232 // 监听的端口
char buff[32*1024];
int main () {
setvbuf(stdout, NULL, _IONBF, 0);
int fd = socket(AF_INET, SOCK_DGRAM, 0);
if (fd < 0) {
printf("Create socket failed!\n");
return -1;
}
struct sockaddr_in sin;
memset(&sin, 0, sizeof(struct sockaddr_in));
sin.sin_family = AF_INET;
sin.sin_addr.s_addr = INADDR_ANY; // 任意ip
sin.sin_port = htons(53232);
sin.sin_port = htons(PORT);
printf("listen port is %u\n", PORT);
if(bind(fd, (struct sockaddr*)&sin, sizeof(struct sockaddr)) < 0) {
printf("bind socket failed!\n");
close(fd);
return -2;
}
while(1) {
socklen_t sin_len = sizeof(struct sockaddr_in);
ssize_t len = recvfrom(fd, buff, sizeof(buff), 0, (struct sockaddr*)&sin, &sin_len);
if(len < 0) {
printf("recvfrom error!\n");
continue;
}
buff[len] = '\0';
printf("%s", buff);
}
return 0;
}文章作者:沃航科技