Я думаю, что пример http_client в документации boost.asio объясняет это лучше, чем я могу:
http://www.boost.org/doc/libs/1_43_0/doc/html/boost_asio/example/http/client/async_client.cpp
Вам не нужно беспокоиться о пакетах, вы получаете поток 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.
Это никогда не повредит, если вы хотите передавать сложные объекты.