C++ ZMQ收音机/天线无法发送多部分信息

C++ ZMQ收音机/天线无法发送多部分信息,c++,zeromq,C++,Zeromq,我试图在ZMQ无线电插座上发送多部分消息,但收到一个EINVAL错误(无效参数)。以下是发送消息第一部分的代码: #include <iostream> #include <cstring> #include "ZmqRadio.h" using namespace std; int main() { auto addr = "udp://127.0.0.1:4444"; auto myGroup = "myGroup"; std::string dat

我试图在ZMQ无线电插座上发送多部分消息,但收到一个EINVAL错误(无效参数)。以下是发送消息第一部分的代码:

#include <iostream>
#include <cstring>
#include "ZmqRadio.h"

using namespace std;

int main() {

  auto addr = "udp://127.0.0.1:4444";
  auto myGroup = "myGroup";
  std::string data = "Hello";

  void *context = zmq_ctx_new();
  void *radio = zmq_socket(context, ZMQ_RADIO);
  zmq_connect(radio, addr);

  zmq_msg_t msg;
  zmq_msg_init_size(&msg, 5);
  zmq_msg_set_group(&msg, myGroup);

  memcpy(zmq_msg_data(&msg), &data[0], 5);

  int rc = zmq_msg_send(&msg, radio, ZMQ_SNDMORE);
  if (rc == -1) {
    int err = zmq_errno();
    cout << "Error: " << err << endl;
  }
}
然后我得到rc=6,我能够通过我的碟形插座读取(单部分)信息


你能帮我指出哪里出了问题吗?

线程安全套接字。线程安全套接字不支持多部分消息

发件人:

ZMQ_无线电插座为螺纹安全型。他们不接受发送时的ZMQ_SNDMORE选项。这将它们限制为单个零件数据

您有两个选择。

  • 使用另一个消息结构来打包您的帧(可能是msgpack),然后作为单个消息通过无线天线发送
  • 切换到ZMQ_PUB/ZMQ_SUB。这里的缺点是您需要使用TCP或PGM作为传输
int rc = zmq_msg_send(&msg, radio, 0);