2011-06-01 114 views
4

我無法獲得ZeroMQ C++包裝來接收多部分消息。使用C版本的相同代碼工作得很好,但是它導致了一個異常,而C++沒有任何解釋。多部分處理代碼如下:如何使用ZeroMQ接收多部分消息?

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    zmq::context_t context(1); 
    zmq::socket_t socket(context, ZMQ_REP); 
    socket.bind("tcp://*:5555"); 

    while(true) { 
     // the following two lines lead to exception 
     zmq::message_t request; 
     socket.recv(&request); 

     //zmq_msg_t message; 
     //zmq_msg_init (&message); 
     //zmq_recv (socket, &message, 0); 
    } 

    return 0; 
} 

它非常簡單;此版本不起作用。但如果我在while循環中註釋掉前兩行並取消註釋當前註釋的(C版本)代碼,它就可以工作。 這是Windows XP sp3,Zeromq 2.1.1和Visual Studio 2010 Express。

如果我發送單部分消息,兩個版本都可以正常工作。 我在做什麼錯?

+0

我被告知升級到最新版本的ZMQ,除了代碼被認爲是好的。 – mahonya 2011-06-10 08:14:50

回答

0

我決定使用C代碼版本。總的來說,無論如何,所有的例子似乎都在C中。

2

也許C版本的代碼也不起作用,但是你不檢查zmq_recv的返回碼,所以你不會注意到它。此外,接收miltipart消息時,你應該檢查是否有通過插座來接收,這樣更多的消息部分:

int64_t more = 0; 
size_t more_size = sizeof(more); 
socket.getsockopt(ZMQ_RCVMORE, &more, &more_size); 
if (more != 0) 
{ 
    //has more parts 
} 

此外,看一看ZmqMessage C++ library專門用於發送和接收ZeroMQ多的消息而設計的。