首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ZeroMQ示例的网络诊断

ZeroMQ示例的网络诊断
EN

Stack Overflow用户
提问于 2019-09-19 11:57:13
回答 1查看 530关注 0票数 2

我正在尝试实现ZeroMQ,以便在Raspberry 3 (Raspbian )上获得一个应用程序,以便与通过有线或无线局域网连接的单独计算机上的应用程序(在本例中为Windows764bit OS)进行通信。

我在这两台机器上使用C库接口编译了ZeroMQ (在Windows上使用Cygwin )和Hello示例(我稍微修改了这个示例,以打印指针值,以确保函数“工作”)。这两台机器都是连接的(在本例中是通过有线以太网链路和路由器连接的),并且连接良好(我通过Xrdp或SSH从PC连接到RPi )。

我遇到的问题是,客户机/服务器ZeroMQ程序似乎没有“看到”对方,尽管它们看起来确实有效,我的问题是:我应该采取哪些第一步来调查为什么会发生这种情况?有什么命令行或GUI工具可以帮助我找出造成阻塞的原因吗?(比如端口活动监视器之类的?)

我对人际关系网知之甚少,所以在你的回复中,请考虑我在所有事情上都是新手。RPi (服务器)上的源代码是:

代码语言:javascript
复制
// ZeroMQ Test Server
// Compile with
// gcc -o zserver zserver.c -lzmq

#include <zmq.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <assert.h>

int main (void)
{
    void *context=NULL,*responder=NULL;
    int rc=1;

    //  Socket to talk to clients
    context = zmq_ctx_new ();
printf("Context pointer = %p\n",context);
    responder = zmq_socket (context, ZMQ_REP);
printf("Responder pointer = %p\n",responder);
    rc = zmq_bind (responder, "tcp://*:5555");
printf("rc = %d\n",rc);

    assert (rc == 0);

    while (1) {
        char buffer [10];
        zmq_recv (responder, buffer, 10, 0);
        printf ("Received Hello\n");
        sleep (1);          //  Do some 'work'
        zmq_send (responder, "World", 5, 0);
    }
    return 0;
}

PC (Cygwin)客户端的源代码是:

代码语言:javascript
复制
// ZeroMQ Test Client
// Compile with:
// gcc -o zclient zclient.c -L/usr/local/lib -lzmq

#include <zmq.h>
#include <string.h>
#include <stdio.h>
#include <unistd.h>

int main (void)
{
  void *context=NULL,*requester=NULL;

    printf ("Connecting to hello world server\n");
    context = zmq_ctx_new ();
printf("Context pointer = %p\n",context);
    requester = zmq_socket (context, ZMQ_REQ);
printf("Requester pointer = %p\n",requester);
    zmq_connect (requester, "tcp://localhost:5555");

    int request_nbr;
    for (request_nbr = 0; request_nbr != 10; request_nbr++) {
        char buffer [10];
        printf ("Sending Hello %d\n", request_nbr);
        zmq_send (requester, "Hello", 5, 0);
        zmq_recv (requester, buffer, 10, 0);
        printf ("Received World %d\n", request_nbr);
    }
    zmq_close (requester);
    zmq_ctx_destroy (context);
    return 0;
}

在RPi LXTerminal上,我运行服务器并获得以下信息:

代码语言:javascript
复制
Context pointer = 0xefe308
Responder pointer = 0xf00e08
rc = 0

在Cygwin Bash shell上,我运行客户机并得到以下内容:

代码语言:javascript
复制
Connecting to hello world server
Context pointer = 0x60005ab90
Requester pointer = 0x60005f890
Sending Hello 0

..。在那里,他们都挂了起来--一个在听,另一个在发送,但都没有回应对方。任何线索,如何开始调查,将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-19 12:42:52

zmq_connect中,您必须指示覆盆子的IP地址(它已经执行了zmq_bind )。

它应该是:

代码语言:javascript
复制
// on PC, remote ip is the raspberry one, the one you use for ssh for instance
rc = zmq_connect(requester, "tcp://<remote ip>:5555");
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58010505

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档