3

我似乎无法通过 ZeroMQ 发送我用 msgpack 序列化vector的 a 。struct

这是这个结构的一个向量:

struct MyData
{
    MyData() : id(0), x(0), y(0), a(0) {}
    MyData(const Obj &r) : id(0), x(r.pose[0]), y(r.pose[1]), a(r.pose[2]) {}
    MyData(const Obj *r) : id(0), x(r->pose[0]), y(r->pose[1]), a(r->pose[2]) {}
    double id;
    double x;
    double y;
    double a;
    MSGPACK_DEFINE(id, x, y, a);
};

在发送方:

data是一个std::vector<MyData>

msgpack::sbuffer sbuf;
msgpack::pack(sbuf, data);
zmq::message_t msg(sbuf.data(), sizeof(char *) * sbuf.size(), NULL, NULL);
local_socket->send(msg); // this is just zeromq's send function

我构造了我的sbuffer还是message_t错误的?

在接收方:

我不确定我是否应该强制转换,msg.data()但我找不到任何关于如何使用 ZeroMQ 和消息包的好的文档。

message_t msg;
server_socket->recv(&msg);

msgpack::unpacked unpacked;
msgpack::unpack(&unpacked, reinterpret_cast<char*>(msg.data()), msg.size());
msgpack::object obj = unpacked.get();

std::vector<MyData> data;
obj.convert(&data);
printf("size %d\n", data.size());

我收到以下错误:

在抛出 'msgpack::type_error'
what() 的实例后调用终止:std::bad_cast Aborted

我将不胜感激任何帮助。

4

1 回答 1

8

这似乎对我有用:

msgpack::sbuffer sbuf;
msgpack::pack(sbuf, data);
zmq::message_t msg(sbuf.size());
memcpy(msg.data(), sbuf.data(), sbuf.size());
于 2013-04-09T09:45:57.247 回答