【发布时间】:2022-11-19 18:50:46
【问题描述】:
我目前正在从事一个项目,该项目需要我通过 ZMQ 套接字连接两个终端,而我当前的解决方案是通过 PUB-SUB 套接字功能实现的。但是,当我运行程序时,当发布者发送消息时,订阅者永远不会收到任何消息。我试过更改它们之间的 IP 地址,并尝试在 sub 和 pub 之间“强制发送”消息,但无济于事。
代码的简化形式:
服务器.cpp:
#include <zmq.h>
const char* C_TO_S = "tcp://127.0.0.1:5557";
const char* S_TO_C = "tcp://127.0.0.1:5558";
int main() {
zmq::context_t context(1);
zmq::socket_t pub(context, ZMQ_PUB);
zmq::socket_t sub(context, ZMQ_SUB);
int sndhwm = 0;
sub.connect(C_TO_S);
pub.bind(S_TO_C);
sub.setsockopt(ZMQ_SUBSCRIBE, &sndhwm, sizeof(sndhwm));
//cout << C_TO_S << endl;
while(true) {
zmq::message_t rx_msg;
sub.recv(&rx_msg);
cout << "b\n";
// other code goes here
}
}
客户端.cpp:
#incldue <zmq.h>
const char* C_TO_S = "tcp://127.0.0.1:5557";
const char* S_TO_C = "tcp://127.0.0.1:5558";
void network_thread() {
zmq::context_t context(1);
zmq::socket_t pub(context, ZMQ_PUB);
zmq::socket_t sub(context, ZMQ_SUB);
int sndhwm = 0;
sub.connect(S_TO_C);
pub.connect(C_TO_S);
sub.setsockopt(ZMQ_SUBSCRIBE, &sndhwm, sizeof(sndhwm));
while (true) {
cout << pub.send("a", strlen("a"), 0);
cout << "AA\n";
}
// Other code that doesn't matter
}
Client.cpp中的main在单独的线程中调用network_thread,然后spaming publisher将消息“a”发送给server。但是,服务器没有收到来自客户端的任何消息。如果服务器收到任何消息,它会打印出“b”,但它从不这样做。我也知道发布者正在发送消息,因为它在执行时打印出“1”。
此外,假设客户端订阅者和服务器发布者有一个目的。虽然它们也不能在 atm 上工作,但对另一组的修复应该转化为对这些的修复。
我试过更改端口、发送垃圾邮件等。没有任何结果导致服务器收到任何消息。
任何帮助将不胜感激,谢谢。
【问题讨论】:
标签: c++ zeromq publish-subscribe