разный размер для одного и того же выхода в Cooja - PullRequest
0 голосов
/ 25 декабря 2018

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

Вот код в «Полученных пакетах»часть.Я попытался скопировать полученные 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 'fi | 1 | request | a || seq | continue |'ID: 1 appdataSize: 2 ID: 1 fi

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

...