отправка сериализованного типа через сокет-соединение boost-asio с использованием boost-сериализации - PullRequest
0 голосов
/ 18 июля 2011

Я пытаюсь отправить 1 КБ данных с «сервера» на «клиента», но я просто не могу сделать это правильно. Есть несколько вещей, которые мне нужно сделать в этом: 1) Необходимо использовать разъемы boost-asio для передачи данных. 2) Необходимо сериализовать созданный мной тип (пакет), который будет содержать данные в виде строки или символа *

Вот что происходит:

Сначала я получаю 1 КБ данных из образца текстового файла на сервере. Я получаю это и помещаю в тип пакета, который я создал. Я определил поле данных в пакете для хранения этих данных в виде std :: string. (Я попробовал char *, но он не сработал - см. Следующий параграф).

Во-вторых, я сериализую его, используя boost text_oarchive. У меня нет проблем с сериализацией типа Packet, если он просто содержит строку, но мне действительно нужен способ сериализации с типом данных в виде массива char (чтобы он лучше работал с сокетом ниже)

В-третьих, я отправляю его через разъем asio boost Здесь у меня проблема, потому что я не могу найти способ отправить std :: string через соединение с сокетом. Все, что я вижу в качестве примеров и в документации, нуждается в буфере, использующем тип char *, а не строку.

это просто головная боль. Вы можете помочь?

1 Ответ

0 голосов
/ 18 июля 2011

Все что я вижу в качестве примеров и в документации нужен буфер используя символ типа *, а не строку

Это правильно, хотя это довольно просто сделать с помощью Boost.Serialization и Boost.Asio. Вы можете сериализовать, используя text_oarchive к boost::asio::streambuf, а затем отправить содержимое буфера результирующего потока с помощью сокета.

См. вопрос и мой ответ на этот вопрос для более полного примера.

...