Используйте streambuf в качестве буфера для чтения и записи boost asio

Я использую этот код для чтения

  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 на 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));

Но не работает. Как мне это сделать?

1 ответ

Решение

Вам нужно получить mutable_buffers_type от streambuf использовать в качестве первого параметра для async_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 документация здесь и здесь для получения дополнительной информации.

Другие вопросы по тегам