如何将助推兽multi_buffer转换为字符串?

How to convert boost beast multi_buffer to string?

本文关键字:转换 buffer 字符串 multi      更新时间:2023-10-16

我从boost::beast网站复制websocket示例并运行它Websocket会话工作正常,但我不知道如何将收到的multi_buffer转换为字符串。

下面的代码是 Websocket 会话处理程序。

void
do_session(tcp::socket &socket) {
try {
// Construct the stream by moving in the socket
websocket::stream <tcp::socket> ws{std::move(socket)};
// Accept the websocket handshake
ws.accept();
while (true) {
// This buffer will hold the incoming message
boost::beast::multi_buffer buffer;
// Read a message
boost::beast::error_code ec;
ws.read(buffer, ec);
if (ec == websocket::error::closed) {
break;
}
// Echo the message back
ws.text(ws.got_text());
ws.write(buffer);
}
cout << "Close" << endl;
}
catch (boost::system::system_error const &se) {
// This indicates that the session was closed
if (se.code() != websocket::error::closed)
std::cerr << "Error: " << se.code().message() << std::endl;
}
catch (std::exception const &e) {
std::cerr << "Error: " << e.what() << std::endl;
}
}

有没有办法将缓冲区转换为字符串?

由于最初的问题是关于直接转换为字符串,而不使用流,我决定添加我的答案。

您可以使用beast::buffers_to_string(buffer.data()).

您可以在buffer.data()上使用缓冲区

std::cout << "Data read:   " << boost::beast::buffers(buffer.data()) << 
std::endl;