Я реализовал простой пример pub / sub. Я отправляю простое приветственное сообщение и пытаюсь получить его у подписчика.
Мой код издателя —
std::string msg = "hello,";
zmq::message_t message(static_cast<const void*> (msg.data()), msg.size());
publisher.send(message);
Мой код подписчика —
zmq::message_t msgReceive;
subscriber.recv(&msgReceive);
const char* buffer_body = static_cast<const char*>(msgReceive.data());
printf("Message: %s\n",buffer_body);
Вывод, который я получаю, — «привет,? Тип сокета» вместо «привет»
Я не могу понять, где ошибка. Любая помощь будет оценена.
Попробуйте изменить эту строку
const char* buffer_body = static_cast<const char*>(msgReceive.data());
в
const char* buffer_body = static_cast<const char*>(msgReceive.data(), msgReceive.size());
Таким образом, вы можете указать C_String, где завершаться, основываясь на длине сообщения, вместо того, чтобы позволить ему завершаться самостоятельно, когда он находит первый нулевой символ.
Для получения дополнительной информации см. гид.
Других решений пока нет …