我认为 boost.asio 文档中的 http_client 示例比我能更好地解释它: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。如果您想传输复杂的对象,那永远不会受到伤害。