我正在使用Cooja实现碎片化。我想将接收到的udp数据包复制到一个char数组中,但是当我打印它和复制它时,接收到的数据包的长度似乎是不同的。
这是“接收数据包”部分中的代码。我试图将收到的appdata复制到“ log”。我尝试了uip_urgdatalen()函数,而不是uip_datalen()。它在uip.h文件中定义并显示已到达连接的任何带外数据(紧急数据)的长度。我应该设置配置参数UIP_URGDATA来使用此功能。我不知道在哪里或应该如何定义它。我在uip.h,uip.c和包含我的代码的c文件中将其定义为“ #define UIP_URGDATA 1”。它不起作用。
//receive packets
static void tcpip_handler(void){
char * log;
char *appdata;
if(uip_newdata()) {
appdata = (char *)uip_appdata;
appdata[uip_datalen()] = 0;
PRINTF("****\nDATA recv '%s' \n ", appdata);
log = (char *)malloc(sizeof(appdata));
printf("appdataSize : %d\n",sizeof(appdata));
strncat(log, appdata, sizeof(appdata));
}
}
这是我从节点2发送此消息的消息: ID:2(消息:fi | 1 | request | a || seq | continue |) 这是使用上面的代码收到的消息: ID:1 DATA recv'fi | 1 | request | a || seq | continue |' ID:1 appdataSize:2 ID:1 fi
appdata的大小为2个字节,但是当我想在“ PRINTF(“ **** \ nDATA recv'%s'”,appdata)“行中打印时,它大于2个字节。如您所见,前两个字节刚复制到日志中,而我希望整个数据包都被复制。无论是否使用uip_urgdatalen,请您帮我解决这个问题吗?