【问题标题】:ZeroMQ: PUB socket binding problemsZeroMQ:PUB 套接字绑定问题
【发布时间】:2015-02-15 08:56:32
【问题描述】:

我有一个简单的 PUB/SUB 消息传递程序。我正在尝试将其绑定到tcp://*:5556 范围以在所有可用的ips 上发布该端口。当套接字绑定时,错误正在返回:

资源暂时不可用。

我正在尝试首先启动发布者线程。港口是免费的。 绑定过程有什么问题?

出版商:

int main (void) {                                               
    void *context = zmq_ctx_new();                              
    void *publisher = zmq_socket(context, ZMQ_PUB);             
    zmq_bind(publisher, "tcp://*:5556");                        
    printf("Binding: %s\n", zmq_strerror(errno));               

    srandom((unsigned) time(NULL));                             
    while(true) {                                               
        char update[20];                                        
        sprintf(update, "%05d %d %d", randof(10000), randof(215) - 80, randof(50) + 10);                                           
        sleep(1);                                               
        zmq_send(publisher, update, strlen(update), 0);         
        printf("Sending: %s", zmq_strerror(errno));             
    }                                                           
    zmq_close(publisher);                                       
    zmq_ctx_destroy(context);                                   
    return 0;                                                   
}                                                               

订阅者:

int main () {
    void *context = zmq_ctx_new();
    void *subscriber = zmq_socket(context, ZMQ_SUB);
    zmq_connect(subscriber, "tcp://localhost:5556");
    printf("Connection: %s\n", zmq_strerror(errno));

    while(true) {
        char update[20];
        zmq_recv(subscriber, update, 20, 0);
        printf("Receiving: %s\n", zmq_strerror(errno));
        printf("Message: %s\n", update);
    }   
    zmq_close(subscriber);
    zmq_ctx_destroy(context);
    return 0;
}       

【问题讨论】:

    标签: sockets tcp messaging zeromq


    【解决方案1】:

    根据给出的信息,很可能其他东西已经绑定到该套接字。您的机器上是否已经有一个程序实例正在运行?或使用该端口号的另一个进程。

    尝试用 ipc 替换 tcp。编写这些示例程序可以避免这样的问题。

    另外:您的 SUB 套接字没有订阅任何内容,因此即使绑定有效,SUB 也不会收到任何内容。

    【讨论】:

    • 感谢您的建议。请描述一下,如何正确订阅SUB socket?
    • 而且,绑定发生时端口已关闭。
    • 来自zguide.zeromq.org/page:all - char *filter = "whatever"; rc = zmq_setsockopt (subscriber, ZMQ_SUBSCRIBE, filter, strlen (filter));
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-25
    • 1970-01-01
    • 1970-01-01
    • 2015-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多