nca*_*sas 4 c++ boost boost-asio
我试图使用std :: istream作为数据源.我想在istream的流缓冲区中放置自定义二进制数据,以便以后可以从istream中检索它.
我已经阅读了关于boost :: asio :: streambuf以及如何使用它来完成我想要的但是使用套接字作为数据源而不是内存缓冲区,这是我想要使用的.
根据我从文档中理解的,步骤应该是:
我不知道如何解决第4步,所以即使我朝着正确的方向前进,我也不知道.
描述的步骤是否正确?如果是这样,如何解决第4步?
你可以轻松发送任何标准流,所以你也可以stringstream.您可以将二进制数据写入字符串流(它实际上只是一个字节数组).
一些样本:
boost::asio::streambuf request;
std::ostream request_stream(&request);
request_stream.write(&binarydata_buf, sizeof(binarydata_buf));
// or use stream operators: request_stream << "xxx" << yyy;
// Send the request.
boost::asio::write(socket, request);
Run Code Online (Sandbox Code Playgroud)
如果你已经有一个完全填充的istream(在这个例子中使用std :: cin作为dummy):
boost::asio::streambuf request;
std::ostream request_stream(&request);
request_stream << std::cin.rdbuf() << std::flush;
// Send the request.
boost::asio::write(socket, request);
Run Code Online (Sandbox Code Playgroud)
方法来填充的IStream是例如ostream::write或升压序列化binary_archive
当然,有许多方法可以给猫皮肤,所以在盲目复制之前一定要考虑其他选项.
请参阅如何通过C++中的boost套接字发送ostream?