我正在寻找一种通过带有 Boost Asio 的套接字发送由自定义数据结构组成的数据包的方法。目前我知道你可以发送一个带有标准 boost asio 缓冲区的字符串(在 boost::asio::write(..) 方法中)。
例如,是否可以将数据从填充的结构发送到服务器或客户端?如果是,我需要怎么做,因为我找不到关于此的文档。
最佳答案
您可以按位复制 POD 对象。
事实上,只要 T 是 POD 结构,Asio 就接受 boost/std array<T, N>
、 T[]
或 vector<T>
缓冲区。
- http://www.boost.org/doc/libs/1_55_0/doc/html/boost_asio/overview/core/buffers.html
- http://www.boost.org/doc/libs/1_55_0/doc/html/boost_asio/reference/buffer.html 用于可变/常量缓冲区序列包装器的各种构造函数。
否则,您可以使用 Boost Serialization 来序列化您的数据。
最后,Boost Spirit 对二进制文件(二进制双字 (big-endian/little-endian)、二进制 float )提供了一些支持。
更新示例:
#include <memory>
#include <boost/asio.hpp>
int main()
{
struct { float a, b; } arr[10];
auto mutable_buffer = boost::asio::buffer(arr);
}
关于c++ - 在 Boost Asio 缓冲区中打包结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22868875/