Je pense que l'exemple de http_client dans boost.asio la documentation explique mieux que moi: http://www.boost.org/doc/libs/1_43_0/doc/html/boost_asio/example/http/client/async_client.cpp
Vous aurez pas besoin de se soucier de paquets, vous obtenez un flux TCP, et que vous lisez de la prise appartenant au ruisseau. Fin de l'histoire.
Vous avez besoin de quelque chose comme ça, la différence est que vous ne lirez pas la réponse dans std :: cout, mais reconstruire votre objet (ne sachant pas si cela fonctionne pour les objets, ou simplement des types simples).
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_;
};
Vous devriez également vous pencher sur la sérialisation, par exemple Boost.Serialization. Cela ne fait jamais mal si vous voulez transférer des objets complexes.