之前小沃写过关于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; }
文章作者:沃航科技