如何找出通过Boost ASIO TCP套接字连接发送了多少数据?

时间:2011-08-17 02:28:07

标签: c++ boost tcp boost-asio traffic-measurement

我有一些指向boost::asio::io_serviceboost::asio::ip::tcp::endpointboost::asio::ip::tcp::acceptorboost::asio::ip::tcp::socket的分享指针。我接受用户连接并将套接字的shared_ptr传递给我的某些类。它做了它的工作。

现在我想要的很简单 - 计算我的流量。我想获得有关在该连接期间发送和接收的数据量的信息。如何从接受的Boost ASIO TCP套接字中获取此类信息?

1 个答案:

答案 0 :(得分:1)

假设您使用异步方法,赋予async_read的完成处理程序将指示接收的字节数。类似地,给async_write的完成处理程序将指示写入的字节数。将运行计数器维护为类的成员,将方法绑定为前面描述的完成处理程序,这是微不足道的。

#include <boost/asio.hpp>

#include <iostream>

class Socket
{
public:
    Socket(
            boost::asio::io_service& io_service
          ) :
        _socket( io_service ),
        _counter( 0 )
    {

    }

    void readHandler(
            const boost::system::error_code& error,
            std::size_t bytes_transferred
            )
    {
        _counter += bytes_transferred;
    }

    void writeHHandler(
            const boost::system::error_code& error,
            std::size_t bytes_transferred
            )
    {
        _counter += bytes_transferred;
    }

private:
    boost::asio::ip::tcp::socket _socket;
    std::size_t _counter;
};

int
main()
{
    boost::asio::io_service io_service;
    Socket foo( io_service );
}