7

ZeroMQ C++ ラッパーでマルチパート メッセージを受信できません。C バージョンを使用した同じコードは問題なく動作しますが、C++ ではまったく説明のない例外が発生します。マルチパート処理コードは次のとおりです。

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 ループの最初の 2 行をコメント アウトし、現在コメントされている (C バージョン) コードのコメントを解除すると、機能します。これは、Windows XP sp3、Zeromq 2.1.1、および Visual Studio 2010 Express です。

単一部分のメッセージを送信すると、両方のバージョンが正常に動作します。私は何を間違っていますか?

4

3 に答える 3

3

おそらく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
}

また、特に ZeroMQ マルチパート メッセージの送受信用に設計されたZmqMessage C++ ライブラリもご覧ください。

于 2011-09-12T11:29:48.697 に答える
0

C バージョンのコードを使用することにしました。とにかく、一般的にすべての例は C で書かれているようです。

于 2011-06-12T15:34:48.747 に答える