我修改了boost附带的客户端示例。如果我在handle_handshake方法中发送请求,一切都按预期工作。
我想要做的是连接到服务器,在此成功发送请求或多个请求之后。如果我尝试在handle_handshake之后发送请求,我在handle_write例程中收到一条错误消息 - 未初始化。
所有调用都是异步的,因此有效的路径是 呼叫连接 调用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";
}
}
}
我错过了什么吗?我需要能够在连接后向服务器发出多个请求。
答案 0 :(得分:1)
我错过了一些东西。 asyc_connect调用我有io_service.run。接下来,我调用了asyc_write,然后使用io_service.run()。我需要在第一次调用
之后添加io_service.reset()提升文档 io_service.reset
当由于io_service被停止或者由于io_service被停止而返回先前调用这些函数时,必须在run(),run_one(),poll()或poll_one()函数的任何第二次或更高版本的调用之前调用此函数。用完了。此函数允许io_service重置任何内部状态,例如“已停止”标志。