c ++ Отправка структуры по сети
Я работаю с Intel SGX, который имеет предопределенные структуры. Мне нужно отправить эти структуры через сетевое соединение, которое управляется с помощьюboost::asio
, Структура, которую нужно отправить, имеет следующий формат:
typedef struct _ra_samp_request_header_t{
uint8_t type; /* set to one of ra_msg_type_t*/
uint32_t size; /*size of request body*/
uint8_t align[3];
uint8_t body[];
} ra_samp_request_header_t;
Для отправки и получения, методыasync_write
а такжеasync_async_read_some
используются
boost::asio::async_write(socket_, boost::asio::buffer(data_, max_length),
boost::bind(&Session::handle_write, this,
boost::asio::placeholders::error));
socket_.async_read_some(boost::asio::buffer(data_, max_length),
boost::bind(&Session::handle_read, this,
boost::asio::placeholders::error,
boost::asio::placeholders::bytes_transferred));
в то время какdata_
определяется как
enum { max_length = 1024 };
char data_[max_length];
Мой первый подход состоял в том, чтобы преобразовать отдельные элементы структуры в строки и сохранить их вvector<string>
который затем преобразуется вchar*
тогда как каждый элемент отделен\n
.
Но при сборке получилchar*
на стороне приемника обратно к первоначальной конструкции я столкнулся с некоторыми неприятностями.
Это действительно так, как это должно быть сделано, или есть более хороший способ передачи структуры?