2016-09-27 71 views
0

我在桌面PC上制作了一个简单的client-server应用程序,并在同一台PC上使客户端和服务器成功运行。CZMQ:开始使用Raspberry-Pi

然后我交叉编译的应用程序运行它在树莓上。当我在覆盆子上运行这个应用程序时,覆盆子上的客户端和服务器都运行良好。我可以看到发送和接收的消息。

现在我把PC作为服务器和树莓作为客户端,但我看不到收到的消息。这是我的代码。

PC端代码:

zctx_t *ctx = zctx_new(); 
void *reader = zsocket_new (ctx, ZMQ_PULL); 
int rc = zsocket_connect (reader, "tcp://PC-IP:5555"); 
printf("wait for a message...\n"); 
while(1) 
    { 
     char *message = zstr_recv (reader); 
     Sleep(10); 
     printf("Message: %s",message); 
    } 
zctx_destroy (&ctx); 

树莓端代码:

zctx_t *ctx = zctx_new(); 
void *writer = zsocket_new (ctx, ZMQ_PUSH); 
int rc = zsocket_bind (writer, "tcp://PC-IP:5555"); 
while(1) 
    { 
     cout<<"sending................."<<endl; 
     zstr_send (writer, "HELLO"); 
    } 
zsocket_destroy (ctx, writer); 

我怎样才能使它发挥作用?

+0

你应该总是绑定到本地IP地址(或0.0.0.0所有的IPv4接口或0 :: 0所有的IPv4/IPv6接口),并连接到远程IP地址,而不是相反... – Elijan9

+0

@ Elijan9,如果你写这个评论作为答案,我会批准它。你的评论解决了它。 –

回答

1

的服务器应该总是绑定自身的接口(不论其本地IP地址或0.0.0.0所有的IPv4接口或0::0为IPv4和IPv6)。

客户端应该总是连接到远程IP地址。

既然你想让你的电脑是从树莓派客户拉消息的服务器,我认为你应该使用下列内容:

PC端代码

zctx_t *ctx = zctx_new(); 
void *reader = zsocket_new (ctx, ZMQ_PULL); 
int rc = zsocket_bind (reader, "tcp://PC-IP:5555"); 
printf("wait for a message...\n"); 
while(1) 
    { 
     char *message = zstr_recv (reader); 
     Sleep(10); 
     printf("Message: %s",message); 
    } 
zctx_destroy (&ctx); 

树莓方代码

zctx_t *ctx = zctx_new(); 
void *writer = zsocket_new (ctx, ZMQ_PUSH); 
int rc = zsocket_connect (writer, "tcp://PC-IP:5555"); 
while(1) 
    { 
     cout<<"sending................."<<endl; 
     zstr_send (writer, "HELLO"); 
    } 
zsocket_destroy (ctx, writer); 

当然你也可以运行Raspberry Pi,推服务器,而PC端拉客户端。在这种情况下,你可以使用:

... 
int rc = zsocket_connect (reader, "tcp://raspberrypi-ip:5555"); 
... 

和:

... 
int rc = zsocket_bind (writer, "tcp://raspberrypi-ip:5555"); 
...