Сначала вам нужно закодировать данные структуры в один двоичный буфер
#include <endian.h>
...
struct Data d { ... };
uint32_t be_id = htobe32(d.id);
uint32_t be_len = htobe32(d.msglen);
size_t pos = 0;
uint8_t buf[sizeof(struct Data)];
memcpy(buf, (const void *)&be_id, sizeof(be_id));
pos += sizeof(be_id);
memcpy(buf + pos, (const void *)&be_len, sizeof(be_len));
pos += sizeof(be_len);
memcpy(buf + pos, (const void *)d.msg, sizeof(d.msg));
Затем отправить буфер и проанализировать его с другой стороны.