Разный размер для одного и того же выхода в 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 или нет?