2011-08-17 32 views
1

我有一些共享指针boost::asio::io_serviceboost::asio::ip::tcp::endpoint,boost::asio::ip::tcp::acceptorboost::asio::ip::tcp::socket。我接受用户连接并将套接字的shared_ptr传递给我的某个类。它的工作。如何找出通过Boost ASIO TCP套接字连接发送了多少数据?

现在我想要的很简单 - 统计我的流量。我想知道在该连接期间发送和接收的数据量。如何从公认的Boost ASIO TCP套接字获取这些信息?

+3

这是您可以在自己的代码中执行的操作。你不需要任何提升的帮助。 –

+0

@J T:我尝试创建一个可扩展的服务器。我有一个服务的概念。我在每个用户请求上将套接字传递给每个服务。我想知道这个连接使用了多少流量。 – Rella

回答

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); 
} 
+0

或者,如果我有通过shared_ptr将套接字提升到某个共享库内部的某个服务类(这不是由我构建的服务器作者)的位置,那么在用户和最终服务之间创建tcp代理服务会更容易。 – Rella

相关问题