2011-08-17 35 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

相關問題