chengbaifengyun 2015-01-16 07:01 采纳率: 0%
浏览 5077
已采纳

zeromq进程间的通信怎么使用?

我今天看了下zeromq,也用zeromq写了几个简单的例子,然后看了下它的介绍,发送支持好多通信协议,TCP、UDP、IPC
网上讲的例子都是讲TCP通信的,我想知道如果用来实现进程间的通信,这个要怎么用呢!

  • 写回答

2条回答 默认 最新

  • net_building 2015-01-18 00:20
    关注

    client:
    C/C++ code

    #include
    #include
    #include
    #include

    int main ()
    {

    void *context = zmq_init (1); // Socket to talk to server

    printf ("Connecting to hello world server...\n");

    void *requester = zmq_socket (context, ZMQ_DEALER);
    //void *requester = zmq_socket (context, ZMQ_DEALER);

    zmq_connect (requester, "ipc://pub");
    //zmq_connect (requester, "tcp://localhost:5555");

    int request_nbr;

    while(1)
    {

    zmq_msg_t request;

    zmq_msg_init_data (&request, "Hello", 6, NULL, NULL);

    printf ("Sending request %d...\n", request_nbr);

    zmq_send (requester, &request, 0);

    zmq_msg_close (&request);
    sleep(1);

    /*zmq_msg_t reply;

    zmq_msg_init (&reply);

    zmq_recv (requester, &reply, 0);

    printf ("Received reply %d: [%s]\n", request_nbr, (char *) zmq_msg_data (&reply));

    zmq_msg_close (&reply); */
    }

    zmq_close (requester);

    zmq_term (context);

    return 0;
    }

    client1:
    C/C++ code

    #include
    #include
    #include
    #include

    int main ()
    {

    void *context1 = zmq_init (1); // Socket to talk to server

    printf ("Connecting to hello world server...\n");

    //void *requester = zmq_socket (context, ZMQ_REQ);

    void *requester1 = zmq_socket (context1, ZMQ_DEALER);

    //zmq_connect (requester1, "tcp://localhost:5556");

    zmq_connect (requester1, "ipc://pub");

    int request_nbr;

    while(1)
    {

    /*zmq_msg_t request;

    zmq_msg_init_data (&request, "wjl", 8, NULL, NULL);

    printf ("Sending request %d...\n", request_nbr);

    zmq_send (requester1, &request, 0);

    zmq_msg_close (&request);

    sleep(1); */

    zmq_msg_t reply;

    zmq_msg_init (&reply);

    zmq_recv (requester1, &reply, 0);

    printf ("Received reply %d: [%s]\n", request_nbr, (char *)
    zmq_msg_data (&reply));

    zmq_msg_close (&reply);

    }

    zmq_close (requester1);

    zmq_term (context1);

    return 0;
    }

    server:
    C/C++ code

    #include
    #include
    #include
    #include
    #include

    int main ()
    {

    // Prepare our context and socket

    zmq::context_t context (1);
    zmq::socket_t socket (context, ZMQ_DEALER);
    //void *responder = zmq_socket (context, ZMQ_DEALER);
    // zmq_bind(responder, "ipc://pub");

    socket.bind ("ipc://pub");
    //socket.bind ("ipc://pub1");
    //socket.bind("tcp://*:5555");
    //socket.bind("tcp://*:5556");

    while (true)
    {

    zmq::message_t request; // Wait for next request from client

    socket.recv (&request);

    printf ("Received request: [%s]\n", (char *) request.data ()); // Do some 'work'

    //sleep (1); // Send reply back to client

    //zmq::message_t reply (8);

    // memcpy ((void *) reply.data (), (char *) request.data (), 8);

    socket.send (request);
    }
    /*while (1) {
    // Wait for next request from client
    zmq_msg_t request;
    zmq_msg_init (&request);
    zmq_recv (responder, &request, 0);
    printf ("Received Hello\n");
    zmq_msg_close (&request);

        //  Do some 'work'
        sleep (1);
    
        //  Send reply back to client
        zmq_msg_t reply;
        zmq_msg_init_size (&reply, 5);
        memcpy (zmq_msg_data (&reply), "World", 5);
        zmq_send (responder, &reply, 0);
        zmq_msg_close (&reply);
    }
    //  We never get here but if we did, this would be how we end
    zmq_close (responder);
    zmq_term (context);*/
    

    return 0;
    }

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 很想要一个很好的答案或提示
  • ¥15 扫描项目中发现AndroidOS.Agent、Android/SmsThief.LI!tr
  • ¥15 怀疑手机被监控,请问怎么解决和防止
  • ¥15 Qt下使用tcp获取数据的详细操作
  • ¥15 idea右下角设置编码是灰色的
  • ¥15 全志H618ROM新增分区
  • ¥15 在grasshopper里DrawViewportWires更改预览后,禁用电池仍然显示
  • ¥15 NAO机器人的录音程序保存问题
  • ¥15 C#读写EXCEL文件,不同编译
  • ¥15 MapReduce结果输出到HBase,一直连接不上MySQL