我写过客户端服务器通信。但是在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是(&amp; b);字符串s的大小为119,这是不可接受的。
答案 0 :(得分:3)
如果您想获得整个缓冲区,请执行以下操作:
或者像这样:
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());