2013-01-10 28 views
0

我修改了包含boost的客戶端樣例。如果我在handle_handshake方法中發送我的請求,一切都按預期工作。boost asio ssl - 試圖在連接成功後發送請求

我想要做的是連接到服務器,成功後發送請求或多個請求。如果我試圖在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

我錯過了一些東西。 asyc_connect調用我有io_service.run。接下來我打電話給asyc_write,然後用io_service.run()跟着這個。我所需要的第一呼叫

升壓DOC io_service.reset後添加io_service.reset()

該函數必須之前被調用的任何第二或後面設置運行(),run_one的調用的() ,poll()或poll_one()函數在前一次調用這些函數時返回,因爲io_service被停止或不工作。該函數允許io_service重置任何內部狀態,例如「停止」標誌。