【问题标题】:zmq pub sub does not work even when the topic is set即使设置了主题,zmq pub sub 也不起作用
【发布时间】:2021-07-01 22:13:29
【问题描述】:

我正在尝试制作一个简单的 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;
}

【问题讨论】:

  • 我建议检查所有非空函数的返回值,因为很多函数会使用返回值来指示可能的错误。

标签: c zeromq


【解决方案1】:

您的发布者和订阅者都在致电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;
}

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-13
    • 2015-05-29
    • 2022-11-19
    • 2021-12-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多