boost に含まれているクライアント サンプルを変更しました。handle_handshake メソッドでリクエストを送信すると、すべてが期待どおりに機能します。
私がやりたいのは、サーバーに接続することです。これが成功したら、1 つまたは複数のリクエストを送信します。handle_handshake の後にリクエストを送信しようとすると、handle_write ルーチンでエラー メッセージが表示されます - 初期化されていません。
すべての呼び出しは非同期なので、機能するパスは call connect handle_handshake と呼ばれます handle_handshake は、サーバーにメッセージを書き込むメソッドを呼び出します
私が行っている唯一の変更は、handle_handshake 内で「メッセージの送信」ルーチンを呼び出さないことです。
私のアプリはチャットの例と非常によく似ています(1つの例外があります-私のアプリは機能しません)
以下のコードを使用すると、すべてが機能します。
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";
}
}
}
何か不足していますか?接続後、サーバーに複数のリクエストを送信できる必要があります。