2016-11-24 14 views
0

Я реализовал простой паб/подпродукт. Я отправляю простое приветственное сообщение и пытаюсь получить его у абонента. Мой издатель код -подписчик издателя Zero MQ (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); 

Выход я получаю - "привет, Socket-Type" вместо "привет"

I я не могу понять, где ошибка. Любая помощь будет оценена по достоинству.

ответ

1

Попробуйте изменить эту строку

const char* buffer_body = static_cast<const char*>(msgReceive.data()); 

в

const char* buffer_body = static_cast<const char*>(msgReceive.data(), msgReceive.size()); 

Таким образом, вы можете сказать C_String где Terminate на основе длину сообщения, не давая ему оканчивается на своем собственном, когда его находит первый нулевой символ.

Для получения дополнительной информации см. the guide.