2016-09-20 26 views
0

我有兩個簡單的程序:客戶端和服務器。我試圖使用zstr_sendfm和zstr_recv來發送和接收簡單的字符串。粗略地說,我在zeromq教程中使用file transfer test中的代碼。這裏的服務器功能:C ZeroMQ zstr_recv掛起

#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中嘗試了這一點,但沒有運氣。

幫助和建議表示讚賞。

回答

0

我認爲你的客戶端和服務器混淆了,儘管在ZeroMQ客戶端和服務器上並不像普通套接字那樣嚴格。通常情況下,您將創建一個帶有綁定/接收/發送的REP套接字的服務器,並使用連接/發送/接收的REQ套接字創建一個客戶端。您應該先嚐試一下,然後使用ROUTER作爲服務器(而不是REP)和DEALER作爲客戶端(而不是REQ)。