2016-09-27 113 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"); 
...