0

我修改了 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";
}
}
}

我错过了什么吗?连接后,我需要能够向服务器发出多个请求。

4

1 回答 1

1

我错过了一些东西。我有 io_service.run 的 asyc_connect 调用。接下来我调用了 asyc_write,然后使用了 io_service.run()。我需要在第一次通话后添加 io_service.reset()

提升文档 io_service.reset

当由于 io_service 停止或用完而返回这些函数的先前调用时,必须在任何第二组或以后调用 run()、run_one()、poll() 或 poll_one() 函数之前调用此函数工作。此函数允许 io_service 重置任何内部状态,例如“停止”标志。

于 2013-01-10T14:31:30.167 回答