Сериализация и отправка объектов по TCP с использованием boost - PullRequest
5 голосов
/ 03 ноября 2010

Я пытаюсь отправить объекты C ++ через TCP-соединение:

  • Мои объекты все сериализуемы, используя ускоренную сериализацию.
  • TCP-сервер / клиент сделан с boost asio.

В основном я хотел бы отправить сообщение, которое будет содержать тип сообщения (тип отправляемого объекта) и сами данные (сериализованный объект) и размер данных, чтобы я мог обработать буфер (размер может варьироваться для объектов одного типа, так как это не POD).

Я немного застрял, потому что я не знаю, как я могу отправить это. Я не понимаю, каковы шаги для преобразования данных в буфер символов и добавления дополнительной информации (тип сообщения и размер) в начале буфера, а затем передачи этого буфера в функцию отправки соединения tcp, И все это при минимальном количестве копий.

Спасибо.

-

1 Ответ

7 голосов
/ 03 ноября 2010

Здесь вы можете найти хороший пример того, как использовать boost :: serialization вместе с boost :: asio.

Что-то вроде этого является ядром того, что вам нужно:

std::ostringstream archive_stream;
boost::archive::text_oarchive archive(archive_stream);
archive << YOUR_DATA;
outbound_data_ = archive_stream.str();
boost::asio::async_write(socket_, boost::asio::buffer(outbound_data_), handler);
...