Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Программирование под Unix/Linux > [boost] передать сериализованный класс по сети


Автор: lison4ik 19.7.2010, 01:25
Заранее извиняюсь, не просмотрела до конца, может тема уже есть, но я второпях smile 

Сериализовала класс с lboost_serialization. По ходу работы программы проводятся вычисления и каждый раз нужно сериализовать класс и передавать по сети. Хочу использовать boost::asio. Программа большая, происходит это очень часто - хочется один раз при запуске программы открыть соединение и потом только отсылать данные клиенту, не закрывая соединение после каждой их передачи.  

Моя проблема: КАК организовать передачу по сети? Я в бусте новичок, может у самого класса сериализации есть что-то подходящее. 

Уже пробовала сериализовать класс в бинарный файл и посылать его. Но так не хочу. Можно ли это организовать каким-нибудь потоком, не сохраняя данные на диск? 


Автор: boostcoder 19.7.2010, 05:59
создавай объект-сериализатор с аргументом типа std::stringstream вместо std::fstream, после сериализации, бинарный массив получай методом std::stringstream::str().
для десериализации, конструируй объект std::stringstream с аргументом-исходным массивом.
Код

std::stringstream file;
boost::archive::binary_oarchive(file) << object;
boost::asio::write_some(file.str(), ...)
...

std::stringstream file(received_buffer);
boost::archive::binary_iarchive(file) >> object;



Автор: SenkraD 19.7.2010, 08:31
lison4ik,  собственно http://www.boost.org/doc/libs/1_43_0/doc/html/boost_asio/examples.html#boost_asio.examples.serialization

Автор: lison4ik 19.7.2010, 12:11
ура, большое спасибо за быстрый ответ! 
получилось!  smile 

Только сейчас заметила, что  http://www.boost.org/doc/libs/1_43_0/doc/html/boost_asio/examples.html#boost_asio.examples.serialization тоже используется std::stringstream. Пример этот поначалу уже запускала со своим классом вместо stock.hpp, но сразу разобраться было трудно и я как-то запуталась. Вопрос решен! 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)