I\'m looking for a way to send a packet made of a custom data structure through a socket with Boost Asio. At the moment I understand that you can send a string with the stan
You can just copy POD objects bitwise.
In fact, Asio accepts boost/std array<T, N>
, T[]
or vector<T>
buffers as long as T is a POD struct.
Otherwise, you could use Boost Serialization to serialize your data.
Finally, there's some support for binaries (binary dwords (big-endian/little-endian), binary floats) in Boost Spirit.
Update Example:
#include <memory>
#include <boost/asio.hpp>
int main()
{
struct { float a, b; } arr[10];
auto mutable_buffer = boost::asio::buffer(arr);
}
See it Live On Coliru
You can also use Protocol Buffers for that purpose, not hard in configuring
https://code.google.com/p/protobuf/
here is some example which works for me:
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);
}