我已经编写了客户端服务器通信。但是,在C++客户端上解析缓冲区时,我丢失了大部分数据。我已经了解了问题所在,但仍然不知道如何解决:
码:

            std::cout << b.max_size() <<std::endl;
    boost::asio::streambuf::mutable_buffers_type bufs = b.prepare(50000);
    size_t n = socket.receive(bufs);
    // received data is "committed" from output sequence to input sequence
    b.commit(n);
    std::istream is(&b);
    std::string s;
    is >> s;

我分配的缓冲区大小= 5000(最大大小为429496)。我的问题与b.commit(n); std::istream is(&b);字符串s的大小为119,这是 Not Acceptable 。

最佳答案

如果要获取整个缓冲区,请执行以下操作:

streambuf::const_buffers_type bufs = b.data();
std::string s(buffers_begin(bufs), buffers_begin(bufs) + b.size());

或像这样:
streambuf::const_buffers_type bufs = b.data();
std::string s(buffers_begin(bufs), b.size());

要么:
string s(buffer_cast<const char*>(b.data()), b.size());

您可以找到相应的文档here

关于c++ - 将缓冲区转换为字符串C++ Boost,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24414658/

10-12 17:23