Разный размер для одного и того же выхода в Cooja

Я реализую фрагментацию с помощью Cooja. Я хочу скопировать полученные пакеты udp в массив символов, но длина полученного пакета, по-видимому, отличается при печати и копировании.

Вот код в части "получение пакетов". Я попытался скопировать полученные appdata в "журнал". Я попытался использовать функцию uip_urgdatalen() вместо uip_datalen(). он определяется в файле uip.h и показывает длину любых внеполосных данных (срочных данных), поступивших на соединение. Я должен установить параметр конфигурации UIP_URGDATA, чтобы использовать эту функцию. Я не знаю, где и как я должен это определить. Я определил его как "#define UIP_URGDATA 1" в uip.h, uip.c и c-файле, который содержит мой код. это не работает.

    //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 (msg: fi|1|request|a||seq|continue|) А вот и полученное сообщение, используя приведенный выше код: ID:1 DATA recv ' ц | 1 | запрос | || сл | продолжить |" ID:1 appdata Размер: 2 ID:1 фантастический

Размер appdata составляет 2 байта, но когда я хочу напечатать его в строке "PRINTF("****\nDATA recv '%s' ", appdata)", это больше, чем 2 байта. как вы можете видеть 2 первых байта, только что скопированных в журнал, в то время как я хочу, чтобы весь пакет был скопирован. Не могли бы вы помочь мне решить эту проблему независимо от того, используете ли вы uip_urgdatalen или нет?

0 ответов

Другие вопросы по тегам