一些物联网设备,由于是全封闭的,无法使用类似引出一根线的方式来进行debug,可以考虑将需要打印的数据发给服务器,通过udp数据打印出来。
下方是我自己写的一个打印接收数据的程序,一共才47行,也不需要任何依赖。
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <netinet/in.h> int main(int argc, char *argv[]) { setvbuf(stdout, NULL, _IONBF, 0); unsigned short port = 33660; if (argc == 2) { port = atoi(argv[1]); } int fd = socket(AF_INET, SOCK_DGRAM, 0); if (fd < 0) { printf("create socket failed\n"); return -1; } struct sockaddr_in addr; memset(&addr, 0, sizeof(addr)); addr.sin_family = AF_INET; addr.sin_port = htons(port); addr.sin_addr.s_addr = htonl(INADDR_ANY); if (bind(fd, (struct sockaddr *)&addr, sizeof(addr))) { close(fd); return -2; } printf("udp debug server start at port %d\n", port); while (1) { char buf[8 * 1024]; int l = sizeof(addr); ssize_t len = recvfrom(fd, buf, sizeof(buf), 0, (struct sockaddr*)&addr, &l); if (len <= 0) { close(fd); break; } buf[len] = '\0'; unsigned char *src_ip = (unsigned char *)&addr.sin_addr.s_addr; printf("[%d.%d.%d.%d:%d]%s\n", src_ip[0], src_ip[1], src_ip[2], src_ip[3], ntohs(addr.sin_port), buf); } return -3; }
文章作者:沃航科技