【问题标题】:C ZeroMQ zstr_recv hangsC ZeroMQ zstr_recv 挂起
【发布时间】:2016-09-21 23:13:43
【问题描述】:

我有两个简单的程序:一个客户端和一个服务器。我正在尝试使用 zstr_sendfm 和 zstr_recv 来发送和接收一个简单的字符串。粗略地说,我在 zeromq 教程中使用来自file transfer test 的代码。这是服务器功能:

#define PIPELINE = 10;

int server()
{
    char *name = "someName";
    zctx_t *ctx = zctx_new();
    void *router = zsocket_new(ctx, ZMQ_ROUTER);
    zsocket_set_hwm(router, PIPELINE*2);
    if (0 == zsocket_connect(router, tcp://127.0.0.1:6000))
    {
        printf("failed to connect to router.\n");
    }
    printf( "sending name %s\n, name);
    zstr_sendfm( router, name );
    return 0;
}

这是客户端函数:

int client()
{
    zctx_t *ctx = zctx_new ();
    void *dealer = zsocket_new (ctx, ZMQ_DEALER);
    zsocket_bind(dealer, "tcp://*:6000")
    char *receivedName = zstr_recv( dealer );
    printf("received the following name: %s\n", receivedName);
    return 0
}

这两个程序都在同一台计算机上的两个独立程序中运行(除了运行各自的功能之外什么都不做)。

事情总是这样发展的:

  1. 启动客户端函数,该函数在“zstr_recv”中保持原样
  2. 启动服务器函数,连接成功,声称已发送数据,退出
  3. 客户端函数继续坐等,但声称没有从服务器收到任何东西。

我在这里缺少什么?我添加了一堆错误检查,甚至在 gdb 中尝试过,但没有成功。

感谢您的帮助和建议。

【问题讨论】:

    标签: c zeromq


    【解决方案1】:

    我认为您的客户端和服务器混淆了,尽管在 ZeroMQ 中客户端和服务器不像普通套接字那样严格。通常,您将创建一个带有绑定/接收/发送的 REP 套接字的服务器和一个带有连接/发送/接收的 REQ 套接字的客户端。您应该先尝试一下,然后对服务器使用 ROUTER(而不是 REP)和对客户端使用 DEALER(而不是 REQ)。

    【讨论】:

    • 同意,我总是先从客户那里发送。首先从客户端向服务器发送版本号,服务器回复其版本号,然后客户端和服务器都知道如何通信。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-22
    • 2015-06-21
    • 1970-01-01
    相关资源
    最近更新 更多