boost.asio ドキュメントの http_client の例は、私ができるよりもうまく説明していると思います
。
パケットについて気にする必要はありません。TCP ストリームを取得し、ストリームに属するソケットから読み取ります。話の終わり。
このようなものが必要です。違いは、応答を std::cout に読み込むのではなく、そこからオブジェクトを再構築することです (これがオブジェクトに対して機能するのか、単純な型だけに対して機能するのかはわかりません)。
class client
{
...
void handle_read_content(const boost::system::error_code& err)
{
if (!err)
{
// Write all of the data that has been read so far.
std::cout << &response_;
// Continue reading remaining data until EOF.
boost::asio::async_read(socket_, response_,
boost::asio::transfer_at_least(1),
boost::bind(&client::handle_read_content, this,
boost::asio::placeholders::error));
}
else if (err != boost::asio::error::eof)
{
std::cout << "Error: " << err << "\n";
}
}
...
boost::asio::ip::tcp::socket socket_;
boost::asio::streambuf response_;
};
Boost.Serialization などのシリアライゼーションも検討する必要があります。複雑なオブジェクトを転送したい場合は、これで問題ありません。