Как правильно получать данные с помощью ZeroMQ? - PullRequest
1 голос
/ 16 июня 2020

У меня две машины в одной сети:

  1. Первая машина привязывается к сокету по собственному IP-адресу (120.0.0.1) и получает любые данные, поступающие в сокет .bind() -ed на порт 5555:

    zmq::context_t context{1};   
    zmq::socket_t socket{context, ZMQ_SUB};
    socket.setsockopt(ZMQ_SUBSCRIBE,  "lidar");
    
    socket.bind("tcp://120.0.0.1:5555");
    
    while(true)
    {
       zmq::message_t message;
       auto recv = socket.recv(message);
       ROS_INFO("Value: %d", recv.value());
    }
    
  2. Вторая машина, имеющая IP-адрес 120.0.0.248, подключается к первой машине и отправляет ей сообщения:

    sock.connect("tcp://120.0.0.1:5555");
    while (1) {
      double nodes[8192];
      sock.send(zmq::buffer("lidar") , zmq::send_flags::sndmore);
      sock.send(zmq::buffer(nodes, (((int)(count)) * 8)));
    }
    

Но по какой-то причине я не могу получать сообщения на первом компьютере, и он застревает на auto recv = socket.recv(message);.

Каков правильный способ для такого связь?

...