Как сохранить содержимое пакета udp в структуру и распечатать его - PullRequest
0 голосов
/ 18 апреля 2020

У меня есть следующая структура:

typedef struct packet {
  char magic[1];
  char version[1];
  char body_length[2];
  char body[1020];
} packet;

Поскольку существует внешний протокол между всеми узлами, которые мы должны уважать, я знаю, что пакет udp, который я получу, будет 1024 байта, следовательно произвольная длина массива символов.

Вот что я делаю, когда получаю пакет:

struct paquet reply_packet;
rc = recvfrom(s,&reply_packet,sizeof(reply_packet),0,NULL,NULL);
displayPacket(reply_packet);

Как я его отображаю:

void displayPacket (struct paquet p){
  printf("Magic : %s\n",p.magic);
  printf("Version : %s\n",p.version);
  printf("Body Length: %s\n",p.body_length);
  printf("Body : %s\n",p.body);
}

Однако, это вывод, который я имею, если я не ошибаюсь, кажется, что это ASCII может быть? Это не ожидаемый результат.

Magic : _�▒
Version : �▒
Body Length: �▒
Body : ▒

Но когда я пытаюсь напечатать маги c, например:

printf("Magic Test : %d\n",reply_packet.magic[0]);

Magic Test : 95

Это ожидаемый результат, Версия будет 1, и это 1, когда я печатаю его с прецедентом printf, однако я все еще не уверен, как я смогу напечатать тело ... Я думал о том факте, что там не может быть нулевого терминатора, что приводит к выводу мусора в ASCII.

Что я могу сделать, пожалуйста?

Спасибо

...