一些物联网设备,由于是全封闭的,无法使用类似引出一根线的方式来进行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;
}文章作者:沃航科技