Я пытаюсь создать потоковое приложение, используя boost с iostream, но сервер не отделяет кадр изображения в цикле приема, получает все в одном файле (не закрывает файл и продолжает получать другие фреймы в том же файле). Единственное решение, которое я смог найти, было отправлено фреймом для подключения, но он очень медленно течет.Отправить несколько файлов на одно соединение с boost iostream
в настоящее время отправки 1 файл на подключение и все работает (медленно в удаленных сетях)
я хочу, чтобы изменить его, чтобы отправить несколько файлов за соединение (я думаю, что у меня будет выигрыш в производительности), но я имея указанную выше проблему.
«/tmp/img.frame» должны быть перезаписаны
ниже код я использую (изменено только, чтобы сделать одно соединение)
void send_()
{
boost::scoped_ptr<screenshot> ptr_screen(new screenshot);
handle_connection = true;
boost::asio::io_service svc;
boost::asio::ip::tcp::iostream stream_(boost::asio::ip::tcp::resolver::query{ "127.0.0.1", "6293" });
boost::iostreams::filtering_ostream out;
out.push(boost::iostreams::zlib_compressor());
out.push(stream_);
while (handle_connection) {
ptr_screen->Start(); // get screen.jpg
std::ifstream ifs("screen.jpg", std::ios::binary);
out << ifs.rdbuf();
out.flush();
ifs.close();
}
}
void receiver_()
{
connection_handle = true;
try
{
boost::asio::io_service io_service;
boost::asio::ip::tcp::endpoint endpoint(boost::asio::ip::tcp::v4(), 6293);
boost::asio::ip::tcp::acceptor acceptor(io_service, endpoint);
boost::asio::ip::tcp::iostream stream;
boost::system::error_code ec;
acceptor.accept(*stream.rdbuf(), ec);
if(!stream) { return; }
boost::iostreams::filtering_istream in;
in.push(boost::iostreams::zlib_decompressor());
in.push(stream);
while(connection_handle)
{
std::ofstream ofs("/tmp/img.frame", std::ios::binary); // must be overwritten
copy(in, ofs);
ofs.close();
}
}
catch (std::exception& e)
{
std::cerr << "\n[-] " << e.what() << std::endl;
}
}