Я собирался отправить структуру с клиента на сервер, используя boost :: asio :: async_write_some
, в этом случае boost :: serialization
приходит на помощь:
//boost::serialization
struct blank
{
int m_id;
std::string m_message;
template<typename archive>
void serialize(archive& ar, const short version)
{
ar & m_id;
ar & m_message;
}
};
blank info;
info.m_id = 1;
info.m_name = "Rasul";
std::stringstream ss;
boost::archive::binary_oarchive out_archive(ss);
out_archive << info;
Kак я могу отправить / получить out_archive
, используя boost :: asio
асинхронно? Если у вас есть другие идеи?
У std::stringstream
, в который вы сериализуете свою структуру, есть метод str
, позволяющий получить содержимое потока в виде строки, её уже можно преобразовать в бинарный буфер при помощи asio::buffer
, который можно отправлять асинхронно. Только нужно помнить, что буфер на самом деле хранит ссылку на исходную строку, и нужно не допустить её удаления раньше времени.
С точки зрения производительности это не оптимальный подход, т.к. содержимое потока копируется в строку, но boost::serialisation в любом случае не славится производительностью. Можно попытаться немного оптимизировать и влезть во внутренность потока при помощи rdbuf
, но тут уже нужно разбираться с внутренним устройством стандартных потоков. Проще взять другую библиотеку сериализации без использования потоков - в конечном счете вам нужно получить просто массив байт.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Не могу никак дойти до разумного решения данной проблемы, пытался использовать ifstream, fopen
С помощью system можно получить возвращаемое значениеТакже, команду можно открыть как файл
Кусок кода для проверки интернет соединения: