Я хотел бы сериализовать экземпляры класса и отправить их по TCP-соединению с использованием библиотек C++/Boost. Существует слишком много рабочих примеров... Некоторые используют текстовые потоки для буферов, а некоторые используют tcp::iostream. Я не уверен, какой из них подходит для моих нужд.
Требования:
- Переносимость на разные архитектуры (порядок байтов и разрядность не должны быть проблемой)
- Данные должны быть в двоичном формате. (нет текста)
Текущий код:
// Client side:
boost::asio::streambuf b;
std::ostream os(&b);
boost::archive::binary_oarchive oa(os);
message m; // The `message' class is serializable
// construct `m'
oa << m;
boost::asio::write(socket,b.data(),boost::asio::transfer_all());
// Server side:
boost::asio::streambuf b;
std::istream is(&b);
boost::archive::binary_iarchive ia(is);
boost::asio::read(socket,b,boost::asio::transfer_all());
message m;
ia >> m;
Который не работает. Сервер завершает работу с invalid signature исключением.