即使设置了主题,c-zmq pub-sub也不起作用



我正在尝试制作一个简单的PUB/SUB代码,但没有收到任何结果。我把话题设置为空,但仍然没有收到。我做错了什么?我把话题设置为空,这样它就会对所有事情做出反应,我也试着把话题设置成"测试";,但是什么也没发生。

PUB

#include <zmq.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int main (void)
{
void *context = zmq_init(1);
void *socket = zmq_socket(context, ZMQ_PUB);
zmq_connect(socket, "tcp://127.0.0.1:12345");
sleep(1);
char message[15] = "testn";
while(1) {
zmq_send(socket, message, 15, 0);
sleep(2);
printf("sending..n");
}
return 0;
}

SUB

#include <zmq.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int main (void)
{
void *context = zmq_init(1);
void *socket = zmq_socket(context, ZMQ_SUB);
zmq_connect(socket, "tcp://127.0.0.1:12345");
zmq_setsockopt(socket, ZMQ_SUBSCRIBE, "", 0);
char string[15] = "";
while(1) {
zmq_recv(socket,string,15,0);
printf("i has receivedn");
printf("%sn", string);
sleep(1);
}
return 0;
}

您的发布者和订阅者都在调用zmq_connect。因为都没有监听连接,所以它们永远不会建立成功的连接。你需要选择其中一个作为听众。例如,修改pub.c,使其看起来像:

#include <zmq.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int main (void)
{
void *context = zmq_init(1);
void *socket = zmq_socket(context, ZMQ_PUB);
/*
* Call zmq_bind so that the publisher is listening for
* connections.
*/
if (-1 == zmq_bind(socket, "tcp://127.0.0.1:12345")) {
perror("zmq_connect");
exit(1);
}
sleep(1);
char message[15] = "testn";
while(1) {
if (-1 == zmq_send(socket, message, 15, 0)) {
perror("zmq_send");
exit(1);
}
sleep(2);
printf("sending..n");
}
return 0;
}

你会注意到我在这里也添加了一些错误检查。

最新更新