【问题标题】:boost asio ssl - trying to send a request after connection succeedsboost asio ssl - 连接成功后尝试发送请求
【发布时间】:2013-01-10 22:31:30
【问题描述】:

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

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

【问题讨论】:

    标签: c++ boost ssl boost-asio


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

    【讨论】:

      猜你喜欢
      • 2012-02-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-27
      • 2021-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多