我修改了 boost 中包含的客户端示例。如果我在 handle_handshake 方法中发送我的请求,一切都会按预期进行。
我想做的是连接到服务器,成功后发送一个请求或多个请求。如果我尝试在 handle_handshake 之后发送请求,我会在 handle_write 例程中收到错误消息 - 未初始化。
所有调用都是异步的,因此有效的路径是调用 connect handle_handshake 称为 handle_handshake 调用一个将消息写入服务器的方法
我所做的唯一改变是我不调用handle_handshake 中的“发送消息”例程。
我的应用程序的工作方式与聊天示例非常相似(只有一个 execption - 我的不工作)
使用下面的代码一切正常。
void handle_handshake(const boost::system::error_code& error)
{
if (!error)
{
std::stringstream request_;
request_ << "GET /api/0/data/ticker.php HTTP/1.1\r\n";
request_ << "Host: mtgox.com\r\n";
request_ << "Accept-Encoding: *\r\n";
request_ << "\r\n";
boost::asio::async_write(socket_,boost::asio::buffer(request_.str())
,boost::bind(&client::handle_write, this, boost::asio::placeholders::error,
boost::asio::placeholders::bytes_transferred));
}
else
{
std::cout << "Handshake failed: " << error.message() << "\n";
}
}
}
我错过了什么吗?连接后,我需要能够向服务器发出多个请求。