我正在尝试实现ZeroMQ,以便在Raspberry 3 (Raspbian )上获得一个应用程序,以便与通过有线或无线局域网连接的单独计算机上的应用程序(在本例中为Windows764bit OS)进行通信。
我在这两台机器上使用C库接口编译了ZeroMQ (在Windows上使用Cygwin )和Hello示例(我稍微修改了这个示例,以打印指针值,以确保函数“工作”)。这两台机器都是连接的(在本例中是通过有线以太网链路和路由器连接的),并且连接良好(我通过Xrdp或SSH从PC连接到RPi )。
我遇到的问题是,客户机/服务器ZeroMQ程序似乎没有“看到”对方,尽管它们看起来确实有效,我的问题是:我应该采取哪些第一步来调查为什么会发生这种情况?有什么命令行或GUI工具可以帮助我找出造成阻塞的原因吗?(比如端口活动监视器之类的?)
我对人际关系网知之甚少,所以在你的回复中,请考虑我在所有事情上都是新手。RPi (服务器)上的源代码是:
// 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)客户端的源代码是:
// 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上,我运行服务器并获得以下信息:
Context pointer = 0xefe308
Responder pointer = 0xf00e08
rc = 0在Cygwin Bash shell上,我运行客户机并得到以下内容:
Connecting to hello world server
Context pointer = 0x60005ab90
Requester pointer = 0x60005f890
Sending Hello 0..。在那里,他们都挂了起来--一个在听,另一个在发送,但都没有回应对方。任何线索,如何开始调查,将不胜感激。
发布于 2019-09-19 12:42:52
在zmq_connect中,您必须指示覆盆子的IP地址(它已经执行了zmq_bind )。
它应该是:
// on PC, remote ip is the raspberry one, the one you use for ssh for instance
rc = zmq_connect(requester, "tcp://<remote ip>:5555");https://stackoverflow.com/questions/58010505
复制相似问题