boost asio ssl - 尝试在连接成功后发送请求

时间:2013-01-10 01:14:03

标签: c++ boost ssl boost-asio

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

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

1 个答案:

答案 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重置任何内部状态,例如“已停止”标志。

相关问题