使用boost over socket发送和接收压缩文件

时间:2016-10-07 01:30:51

标签: c++ boost

在我的项目中,使用Zlib过滤器压缩套接字读取和写入消息,我想知道如何对文件执行相同的操作。 有什么更好的方法来提高速度?不使用硬盘将数据保存在缓冲区中?

我无法使用boost传输文件,因此欢迎任何帮助和示例。

我使用以下代码发送压缩邮件:

std::string data_
std::stringstream compressed;
std::stringstream original;

original << data_;

boost::iostreams::filtering_streambuf<boost::iostreams::input> out;
out.push(boost::iostreams::zlib_compressor());
out.push(original);
boost::iostreams::copy(out, compressed);

data_ = compressed.str();
boost::asio::write(socket_, boost::asio::buffer(data_ + '\n'));

修改

我想知道如何压缩文件而无需在HD中保存压缩副本。将字节直接保存到缓冲区中,然后发送到套接字。服务器端必须接收文件并解压缩

1 个答案:

答案 0 :(得分:3)

这是我能想到的最简单的事情,它可以做你想要做的事情:

<强> Live On Coliru

#include <boost/iostreams/filtering_stream.hpp>
#include <boost/iostreams/filter/gzip.hpp>
#include <boost/iostreams/copy.hpp>
#include <boost/asio.hpp>
#include <iostream>

int main() {
    std::string data_ = "hello world\n";
    boost::asio::io_service svc;

    using boost::asio::ip::tcp;
    tcp::iostream sockstream(tcp::resolver::query { "127.0.0.1", "6767" });

    boost::iostreams::filtering_ostream out;
    out.push(boost::iostreams::zlib_compressor());
    out.push(sockstream);

    out << data_;
    out.flush();
}

使用简单的命令行监听器,例如:

netcat -l -p 6767 | zlib-flate -uncompress

当它从c ++客户端接收数据时,很高兴地报告“hello world”。