これは、パブリッシャーが文字列「x」をパブリッシュするゼロMQでepgmを使用するパブリッシャーとサブスクライバーの私のコードです。サブスクライバーはメッセージを受信する必要がありますが、このコードでは発生していません。
** 出版社コード:**
include zmq.hpp
include string
include unistd.h
include iostream
using namespace std;
int main(int argc, char *argv[])
{
void *context = zmq_init(1);
void *publisher = zmq_socket(context, ZMQ_PUB);
zmq_bind(publisher, "epgm://eth0;239.192.1.1:5555");
string s = "x.";
while (1)
{
zmq_msg_t message;
zmq_msg_init_size(&message, s.size());
memcpy(zmq_msg_data(&message), s.c_str(), s.size());
int rc = zmq_sendmsg(publisher, &message, ZMQ_DONTWAIT);
}
sleep(3);
}
加入者コード:
include zmq.hpp
include string
include unistd.h
include iostream
using namespace std;
int main(int argc, char *argv[])
{
zmq::context_t context(1);
zmq::socket_t subscriber(context, ZMQ_SUB);
string subscription = "x";
zmq_connect(subscriber, "epgm://eth0;239.192.1.1:5555");
const char *filter = (argc > 1) ? argv[1] : "x";
subscriber.setsockopt(ZMQ_SUBSCRIBE, filter, strlen(filter));
int ret_val;
while (1)
{
string msg_buffer;
zmq_msg_t message;
zmq_msg_init(&message);
if ((ret_val = zmq_recvmsg(subscriber, &message, ZMQ_DONTWAIT)) < 0)
{
cout < "Not receiving";
cout ret_val;
sleep(1);
continue;
}
int size = zmq_msg_size(&message);
msg_buffer.assign((const char *) zmq_msg_data(&message), size);
cout << "Msg buffer : " << msg_buffer << endl;
}
sleep(3);
}
出力:
Not receiving
-1
Not receiving
-1
Not receiving
-1
Not receiving
-1
Not receiving
-1
Not receiving
-1
Not receiving
.
.
.
なぜこれが起こっているのか教えてください...そしてこれを解決する方法は?