Я посылаю структуру через socket (c ++) функцией SENDTO и получаю RECVFORM, но всегда получаю какое-то мусорное значение - PullRequest
0 голосов
/ 05 марта 2012

эй, я работаю над инструментом NCTUns.и здесь я посылаю структуру через функцию sendto.

моя структура -

struct agentClientReportStatus{ 
u_int32_t      type;
u_int32_t      nid;
double         timeStamp;
int            flag;
u_int32_t      moreMsgFollowing;
double         x;
double         y;
double         x1;
double         y1;
double         acceleration;
double         speed;
double         direction;
int            TTL;
int           seqNum;
}    

, а функции -

 n = sendto(myUDPsockfd, msg, sizeof(struct agentClientReportStatus), 0, (struct sockaddr *) &cli_addr, len); 
 n = recvfrom(myUDPsockfd, (char *)&msg, sizeof(struct agentClientReportStatus), 0, (struct sockaddr *) &cli_addr, &len);  

в разделе отправки, когда я печатаю какое-то значениеего дают правильный вывод.но при получении части я получаю ценность мусора.Можно ли отправить его без сериализации?и если нет, то как я делаю сериализацию?

msg of-agentClientReportStatus * msg;msg = new agentClientReportStatus;

1 Ответ

1 голос
/ 05 марта 2012

приемник может иметь

  • различное выравнивание памяти
  • различные порядковые номера (полезные функции для работы с порядковыми номерами: htonl, ntohl и другие)
  • разные размеры стандартных типов с

так ответьте - да, вы должны использовать сериализацию

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...