我试图在我的 C++ 程序中通过 http 接收一个包。我为此目的使用 Boost.Asio。
在我的 handleAccept 方法中,我有这个代码来读取包:
// m_buffer is declared as: std::array<char, 8192> m_buffer;
auto buf = boost::asio::buffer(m_buffer);
newConnection->getSocket().async_read_some(
buf,
boost::bind(&TcpServer::handleRead, this, boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred)
);
这足以获得任何包裹吗?我如何确保它将获得大于 8192 字节的包?
最佳答案
async_read_some
读取收到的消息 高达 你给它的缓冲区的大小。接收到的消息中的字节数在 bytes_transferred
中返回。回调函数的占位符,见basic_stream_socket::async_read_some
如果您知道您希望接收的消息的最大大小,您可以简单地使用一个足够大的缓冲区来容纳该消息。否则,您必须复制 async_read_some
的内容。在其他地方缓冲并在那里建立整个接收到的消息。
关于sockets - Boost.Asio 的 async_read_some 会是整个消息吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44405106/