2016-10-07 148 views
2

在我的项目中,通过套接字读取和写入消息使用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压缩文件。将您的字节直接保存到缓冲区中,然后发送到套接字。服务器端必须接收文件并解压

+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 

其中h在从C++客户端接收数据时,报告“hello world”。

相关问题