Cooja中相同输出的不同大小

时间:2018-12-25 18:07:03

标签: c contiki cooja

我正在使用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,请您帮我解决这个问题吗?

0 个答案:

没有答案