Как считать байты прочитанные / отправленные для повышения :: asio :: ip :: tcp :: iostream - PullRequest
0 голосов
/ 16 апреля 2019

У меня есть клиент-серверное приложение C ++ TCP.Цикл сервера выглядит следующим образом:

void Server::start() {
    using boost::asio::ip::tcp;
    boost::asio::io_service IOservice;
    tcp::endpoint serverEndpoint(tcp::v4(), 12345);
    tcp::acceptor acceptor(IOservice, serverEndpoint);
    std::cout << "Server started on port 12345 and accepting connections...\n";

    for (;;) {
        tcp::iostream clientStream;
        boost::system::error_code err;
        acceptor.accept(*clientStream.rdbuf(), err);
        if (!err) {
            std::cout << "client connected!" << std::endl;
            std::thread t(&Server::handleNewClient, this, std::move(clientStream));
            t.detach();
        } else {
            std::cerr << "Error " << err << std::endl;
        }
    }
}

void Server::handleNewClient(boost::asio::ip::tcp::iostream &&clientStream) {
// read from/write to clientStream
}

Я могу читать и писать в clientStream (например, используя операторы >> и <<) без проблем, но я хочу отслеживать количество байтовбыл отправлен через мой Iostream?Как правильно подходить к измерению данных, записанных / прочитанных в этой ситуации?Я не могу найти метод, возвращающий что-то в этом направлении или что-нибудь, что помогло бы мне рассчитать размер.Я был бы действительно заинтересован в измерении всего размера передаваемых данных (включая TCP + лежащие в основе заголовки протокола + данные) или просто байтов данных TCP. </p>

Редактировать: Чтобы уточнить, я могучтобы увидеть данные трафика с помощью таких инструментов, как wireshark, netstat, tcptop.Я прошу правильный способ измерить это внутри C ++.

...