15

私はこのコードを読んでいます

  socket_.async_read_some(boost::asio::buffer(data_, max_length),
        boost::bind(&session::handle_read, this,
        boost::asio::placeholders::error,
        boost::asio::placeholders::bytes_transferred));

これは書き込み用です

boost::asio::async_write(socket_,
    boost::asio::buffer(data_, bytes_transferred),
    boost::bind(&session::handle_write, this,
    boost::asio::placeholders::error));

ここで、socket_ はソケット、max_length は値 1024 の列挙型、data_ は長さが max_length の char 配列です。

しかし、char配列バッファをstreambufに置き換えたいです。私はもう試した

  boost::asio::streambuf streamBuffer;
  socket_.async_read_some(boost::asio::buffer(streamBuffer),
        boost::bind(&session::handle_read, this,
        boost::asio::placeholders::error,
        boost::asio::placeholders::bytes_transferred));

しかし、機能していません。どうすればできますか?

4

1 に答える 1

16

の最初のパラメータとして使用するには、mutable_buffers_typeからを取得する必要があります。streambufasync_read_some

  boost::asio::streambuf streamBuffer;
  boost::asio::streambuf::mutable_buffers_type mutableBuffer =
      streamBuffer.prepare(max_length);
  socket_.async_read_some(boost::asio::buffer(mutableBuffer),
        boost::bind(&session::handle_read, this,
        boost::asio::placeholders::error,
        boost::asio::placeholders::bytes_transferred));

詳細については、ここここasioのドキュメントを参照してください。

于 2012-05-26T10:35:01.827 に答える