Я пишу клиентские и серверные программы на C ++ ZeroMQ для одной и той же платформы. Мне нужно вызвать некоторые функции с аргументами на сервере. Аргументы представляют собой сложные структуры. Я только начал испытывать это. Я пытаюсь заполнить структуру и заполнить ее в буфере char *, чтобы увидеть, заполнены ли байты в последовательности согласно структуре.
Но когда я пытаюсь напечатать буфер, он печатает мусор. Пожалуйста, посоветуйте, что может быть не так. И это элегантный способ сделать это? Я не могу использовать gRPC или Protobuffs, поскольку сообщение содержит сложные структуры.
struct employee {
uint8_t byt;
int arr[10] = {0};
int number;
uint32_t acct;
};
int main ()
{
// Prepare our context and socket
zmq::context_t context (1);
zmq::socket_t socket (context, ZMQ_PAIR);
struct employee *e = new employee;
e->byt = 0xff;
e->arr[0] = 15;
e->number = 25555;
e->acct = 45;
std::cout << "Connecting to hello world server…" << std::endl;
socket.connect ("tcp://localhost:5555");
char *temp = (char*)malloc(sizeof(employee));
memcpy(temp,e,sizeof(employee));
zmq::message_t request(sizeof(employee));
char *temp1 = temp;
for (int i = 0;i<sizeof(employee);i++) {
std::cout<<temp1[i]<<std::endl;
}
memcpy ((void *)request.data(),(void*)temp, sizeof(employee));
socket.send (request);
// Get the reply.
zmq::message_t reply;
socket.recv (&reply);
return 0;
}