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

zmq pub sub does not work even when the topic is set

我正在尝试制作一个简单的 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] = "test\n";
    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 received\n");
        printf("%s\n", 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] = "test\n";
    while(1) {
        if (-1 == zmq_send(socket, message, 15, 0)) {
            perror("zmq_send");
            exit(1);
        }
        sleep(2);
        printf("sending..\n");
    }

    return 0;
}

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