1

Currently working on a Python to ZMQ Program; this is what I have for the c++ client so far:

    zmq::context_t context{1};
    zmq::socket_t socket{context, zmq::socket_type::req};
    socket.connect("tcp://IPADDRESSPLACEHOLDERTEXT:51000");
    const std::string data{"Message"};
     
    zmq::message_t reply{};
    socket.recv(reply, zmq::recv_flags::none);
    char CHAR[10];
    memcpy(CHAR, zmq_msg_data(&reply), 9);
    CHAR[10] = '\0';

    std::cout << “RESULT: " << CHAR << "," << std::endl;

    return 0;

However, when I run the full-scale Qt program it crashes. ZMQ itself works (tested it with a c++ server, slightly different code) but doesn't work here. Isolated the program thus far to determine that the problem comes from this code block.

MrFreeze2017
  • 79
  • 1
  • 7

1 Answers1

0

Q : ... doesn't work here

A :
Yes,
it cannot work here. ZeroMQ REQ-Scalable-Formal-Communications-Pattern archetype ( typically working "against" its matching counterpart, like in a REQ/REP-channel setup ) can never start waiting to receive an "answer"-message ( typically from a REP-peer, but without ever having asked & delivered a "question"-message before that ). The code hangs waiting for an answer that will never be delivered this way.

Once you repair the code to make the REQ-instance first "ask", with socket.send( aQuestionMESSAGE, zmq::send_flags::none);, before it "waits", be it polling or listening ( be it using a blocking on non-blocking form thereof ), the ZeroMQ will take care of the rest of the "interleaved" two-step dance in the REQ/REP-archetype:
dancing Ask-Listen-Ask-Listen-Ask-Listen-... on the REQ-side,
whereas
dancing Listen-Reply-Listen-Reply-Listen-... on the REP-side

user3666197
  • 1
  • 6
  • 50
  • 92