c++ - 使用streambuf作为缓冲区来 boost asio读写

标签 c++ boost buffer boost-asio streambuf

我正在使用此代码阅读

  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_是socket,max_length是枚举,值为1024,data_是char数组,长度为max_length。

但我想用 streambuf 替换 char 数组缓冲区。我试过了

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

但不起作用。我该怎么做?

最佳答案

您需要获得 mutable_buffers_typestreambuf 中用作 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 文档 herehere了解更多信息。

关于c++ - 使用streambuf作为缓冲区来 boost asio读写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10764986/

相关文章:

c++ - 标准是否保证 uint8_t、int8_t 和 char 都是唯一类型?

c++ - Bazel 允许我包含来自全局安装的库的 header

c++ - 在共享内存中分配的 map 的 map

c++ - boost::scoped_lock 似乎没有锁定 std::cout

c++ - 以下代码中的错误是什么?

mysql - NodeJS MYSQL 查询结果缓冲区?

c++ - 为什么我不能用这个功能在Qt框架中打开另一个进程?

c++ - 读取大文件(超过 1GB)时如何克服内存错误 -- C/C++

c - 使用指针地址索引会导致地址为零

javascript - 从缓冲区中删除多个字节的规范方法