我使用boost::beast将数据从websocket读入std::字符串。我正紧随其后
websocket_sync_client.cpp
在Boost1.71.0中,有一个更改——I/O以二进制形式发送,服务器端没有文本处理程序,只有一个二进制流。因此,在示例中,我添加了一行代码:
// Make the stream binary?? https://github.com/boostorg/beast/issues/1045
ws.binary(true);
一切正常,我“发送”一条消息,然后使用boost::beast::buffers_to_string将对发送消息的响应“读取”到std::string:
// =============================================================
// This buffer will hold the incoming message
beast::flat_buffer wbuffer;
// Read a message into our buffer
ws.read(wbuffer);
// =============================================================
// ==flat_buffer to std::string=================================
string rcvdS = beast::buffers_to_string(wbuffer.data());
std::cout << "<string_rcvdS>" << rcvdS << "</string_rcvdS>" << std::endl;
// ==flat_buffer to std::string=================================
这和我预想的差不多,
除了在(二进制)流的数据上发生某种转义之外
读取的二进制数据包含许多(有意)不可打印的ASCII控制字符,用于分隔/组织消息中的数据块:
我的问题必须有一个简单的解决方案。
如何使ws.read进入“rcvdS”的结果平面缓冲区包含真正原始的、未扫描的数据字节?
这是一个视觉辅助-显示预期与实际数据: