我想序列化一个类的实例,并使用C ++ / Boost库通过TCP连接发送它们。有太多的工作示例......有些使用文本流作为缓冲区,有些使用tcp::iostream
。我不确定哪一个适合我的需要。
要求:
当前代码:
// Client side:
boost::asio::streambuf b;
std::ostream os(&b);
boost::archive::binary_oarchive oa(os);
message m; // The `message' class is serializable
// construct `m'
oa << m;
boost::asio::write(socket,b.data(),boost::asio::transfer_all());
// Server side:
boost::asio::streambuf b;
std::istream is(&b);
boost::archive::binary_iarchive ia(is);
boost::asio::read(socket,b,boost::asio::transfer_all());
message m;
ia >> m;
哪个不行。服务器退出时出现invalid signature
异常。
答案 0 :(得分:1)
您需要使用Boost吗?看起来有一个类似的SO问题here - 有一个响应引用了Boost Serialization TODO部分(这里是latest) - 它看起来像一个可移植的二进制存档仍然在作者的TODO列表中,所以我不确定是否有满足您要求的Boost解决方案。
您可以考虑使用Boost文本序列化存档,即使您的类不是基于文本的。这样做的缺点是速度较慢,序列化格式更加臃肿,但它可以移植。
查看替代方案:
希望这会给你一些新想法。