在Boost Asio缓冲区中打包struct

时间:2014-04-04 17:06:38

标签: c++ boost boost-asio

我正在寻找一种通过Boost Asio的套接字发送由自定义数据结构组成的数据包的方法。目前我了解你可以使用标准的boost asio缓冲区发送一个字符串(在方法boost :: asio :: write(..)中)。

例如,是否可以将填充结构中的数据发送到服务器或客户端?如果是,我该怎么做呢,因为我找不到关于此的文档。

3 个答案:

答案 0 :(得分:5)

您可以按位复制POD对象。

事实上,只要T是POD结构,Asio就会接受boost / std array<T, N>T[]vector<T>个缓冲区。

否则,您可以使用Boost Serialization序列化数据。

最后,在Boost Spirit中对二进制文件(二进制双字(big-endian / little-endian),二进制浮点数)有一些支持。

更新示例:

#include <memory>
#include <boost/asio.hpp>

int main()
{
    struct { float a, b; } arr[10];

    auto mutable_buffer = boost::asio::buffer(arr);
}

查看 Live On Coliru

答案 1 :(得分:1)

您也可以将协议缓冲区用于此目的,而不是配置

https://code.google.com/p/protobuf/

答案 2 :(得分:0)

这是一个适合我的例子:

void callback(STRUCT_A& s)
{
  f_strand.post(boost::bind(f, boost::asio::buffer(&s, sizeof(s))));
}

void f(boost::asio::mutable_buffers_1 v)
{
  STRUCT_A *a = boost::asio_buffer_cast<STRUCT_A*>(v);
}