通过套接字发送和接收压缩文件
Send and receiving compressed files with boost over socket
在我的项目中,通过套接字读写消息是用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'));
编辑:我想知道如何压缩文件而不必在高清中保存压缩副本。直接将字节保存到缓冲区中,然后发送到套接字。服务器端必须接收文件并解压缩
这是我能想到的最简单的事情,它看起来就像你想做的:
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 worldn";
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"
相关文章:
- 浏览压缩文件与游览解压缩它们
- 如何在视觉工作室中使用C++解压缩压缩文件 (.zip)
- 霍夫曼解码压缩文件
- 如何以非阻塞方式压缩文件
- 从本地代码访问apk中的压缩文件(从zip中读取zip)
- 如何将多个协议缓冲区的消息写入可附加的压缩文件中?
- 使用结构 c++ 读取压缩文件 Gzread
- 使用Qt qUnCompress功能解压缩文件
- 如何将二进制数据写入压缩文件
- 使用boost iostreams将数组读写到压缩文件中
- 压缩和解压缩文件 C++
- 在C++中,如何在使用gzstream编写压缩文件时检查错误
- 对解压缩文件(popen)的权限被拒绝
- 无法打开压缩文件
- Qt-包括DLL和压缩文件
- 如何检查 zip 文件或压缩文件是否存在
- 如何压缩文件夹使用 lzma sdk
- 在霍夫曼压缩后将代码表存储在压缩文件中,并从此表构建用于解压缩的树
- c++中的压缩文件IO
- 通过套接字发送和接收压缩文件