我正在寻找一种通过Boost Asio的套接字发送由自定义数据结构组成的数据包的方法。目前我了解你可以使用标准的boost asio缓冲区发送一个字符串(在方法boost :: asio :: write(..)中)。
例如,是否可以将填充结构中的数据发送到服务器或客户端?如果是,我该怎么做呢,因为我找不到关于此的文档。
答案 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);
}
答案 1 :(得分:1)
您也可以将协议缓冲区用于此目的,而不是配置
答案 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);
}