Я реализую фрагментацию с помощью 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 или нет?