Как произвести ретрансляцию трафика через сокеты в Boost Asio. Пытаюсь реализовать что то вроде сервера, к которому подключаются клиенты с одной стороны и подключается БД MySql с другой. При подключении клиента к серверу, сервер ретранслирует трафик к БД. И клиент работает с БД, как будто он на прямую подключен к БД.
Вот прокси-сервер в 50 строк кода,
объяснять как он работает я конечно же не буду.
#include <boost/asio.hpp>
#include <iostream>
boost::asio::io_service io_service;
boost::asio::ip::tcp::endpoint src_endpoint{boost::asio::ip::address_v4::loopback(), 8080};
boost::asio::ip::tcp::acceptor acceptor{io_service, src_endpoint};
boost::asio::ip::tcp::resolver resolver(io_service);
boost::asio::ip::tcp::resolver::query dst_query("arrowd.name", "80");
boost::asio::ip::tcp::resolver::iterator dst_iterator = resolver.resolve(dst_query);
void proxy(std::shared_ptr<boost::asio::ip::tcp::socket> src,
std::shared_ptr<boost::asio::ip::tcp::socket> dst,
std::shared_ptr<std::vector<char>> buf) {
src->async_read_some(boost::asio::buffer(*buf), [src, dst, buf](auto error, auto n) {
std::cout << "read " << n << ' ' << error << '\n';
if (error) { src->close(); dst->close(); return; }
async_write(*dst, boost::asio::buffer(buf->data(), n), boost::asio::transfer_all(),
[src, dst, buf](auto error, auto n) {
std::cout << "write " << n << ' ' << error << '\n';
if (error) { src->close(); dst->close(); return; }
proxy(src, dst, buf);
});
});
}
void accept_one() {
auto src = std::make_shared<boost::asio::ip::tcp::socket>(io_service);
acceptor.async_accept(*src, [src](auto error) {
std::cout << "accept " << error << '\n';
if (error) return;
auto dst = std::make_shared<boost::asio::ip::tcp::socket>(io_service);
dst->async_connect(*dst_iterator, [src, dst](auto error) {
std::cout << "connect " << error << '\n';
if (error) return;
proxy(src, dst, std::make_shared<std::vector<char>>(4096));
proxy(dst, src, std::make_shared<std::vector<char>>(4096));
});
accept_one();
});
}
int main() {
accept_one();
io_service.run();
}
ЗЫ: тестовый сервер был любезно предоставлен @arrowd.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Здравствуйте! Появилась задача - сделать нейросеть, которая будет распознавать числа от 1 до 15 на С++ QtНикогда раньше не имел с этим дело
Help me pleaseHow to display the count of slideshow: in the library http://fotorama
Здравствуйте! В базе есть категории wp_termsСвязи категорий(где указывается кто родитель категории находятся в таблице wp_terms_taxonomy