我正在C ++中的核心模块之间传递消息,该模块必须与Python模块和图形界面通信
我正在使用以下方式使用ZMQ进行消息传递:
int main()
{
context_t context(1);
socket_t publisher(context, ZMQ_PUB);
publisher.bind("tcp://127.0.0.1:50000");
//This sockets takes charge of the python publishing
socket_t send_py(context, ZMQ_SUB);
send_py.bind("tcp://127.0.0.1:5557");
socket_t receive_py(context, ZMQ_SUB);
receive_py.connect("tcp://127.0.0.1:5558");
receive_py.setsockopt(ZMQ_SUBSCRIBE, NULL, 0);
zmq::message_t control_signal(sizeof(float));
zmq::message_t control_signal_second(sizeof(float));
cout<<"flag"<<endl;
publisher.send(control_signal);
cout<<"flag_1"<<endl;
send_py.send(control_signal_second);
cout<<"flag_2"<<endl
}
我已经玩弄了地址,我确信这些端口是打开的。
代码编译,但我得到以下输出:
flag
flag_1
terminate called after throwing an instance of 'zmq::error_t'
what(): Operation not supported
Aborted (core dumped)
正确发布其中一个,但不要让send_pyu.send正常工作。
非常感谢
答案 0 :(得分:1)
您似乎已将send_py
定义为订阅者:
socket_t send_py(context, ZMQ_SUB);
send_py.bind("tcp://127.0.0.1:5557");
..但你正在尝试发送数据,这是无效的,不受支持;订阅者收到,他们不发送数据。
send_py.send(control_signal_second);
如果您需要发送数据,请使用PUB
,PUSH
或其他一些套接字类型,但SUB
不适用于send()
;它将抛出Operation Not Supported
。