boost庫在工作(32)網路服務端之二

2021-09-09 03:02:26 字數 967 閱讀 3621

在這個例子裡,伺服器物件主要使用boost::asio::io_service物件,這個物件主要用來構造非同步接收資料使用,接著定義boost::asio::ip::tcp::acceptor物件,這個物件主要用來接收所有連線進來到伺服器的連線,也就是起到監聽的作用。在伺服器類的建構函式裡主要呼叫接受物件的async_accept方法發起監聽連線的作用,就是等著客戶端連線過來,如果不發起連線,是收不到任何連線的。當伺服器收到乙個客戶端連線進來時,就會響應函式cserver類的handleaccept函式,在這個函式裡主要做以下工作:把剛連線進來的連線啟動處理這個客戶端的資料,然後建立乙個新連線,以便接收下乙個客戶端連線進來。在上面的**裡,可以看到使用boost::shared_ptr智慧型指標,這樣每個連線都是使用共享智慧型指標的方式來管理,只要這個連線存在,就不會刪除連線占用的記憶體。下面來仔細地看連線處理的**,如下:

//封裝乙個服務端類來處理網路。

//軟體開發人員: 蔡軍生 2013-06-30

//class cconnect :

public boost::enable_shared_from_this< cconnect >

boost::asio::ip::tcp::socket& getsocket(void)

void start(void)

void handleread(const boost::system::error_code& error,

size_t bytes_transferred) }

void handlewrite(const boost::system::error_code& error) }

private:

// boost::asio::ip::tcp::socket m_socket;

// boost::arraym_chbuffer;

std::string m_strhit;

};

boost庫在工作(32)網路服務端之二

下面來仔細地看連線處理的 如下 封裝乙個服務端類來處理網路。class cconnect public boost enable shared from this cconnect boost asio ip tcp socket getsocket void void start void voi...

boost庫在工作(31)網路服務端之一

先來看看例子的第一部份,接收連線伺服器部份,如下 伺服器,主要接收新連線,並啟動新連線接收資料。class cserver 收到客戶端連線進來事件響應。void handleaccept boost shared ptr cconnect pnewconnect,const boost system...

boost庫在工作(36)網路服務端之六

在上面介紹了管理所有連線的類,這個類主要就是新增新的連線,或者刪除不需要的連線。但是管理的類callconnect是沒有辦法知道什麼時候新增,什麼時候刪除的,它需要從接收到連線類裡獲取得到新的連線,從連線類裡獲得刪除的事件。如下面的 封裝乙個服務端類來處理網路。軟體開發人員 蔡軍生 2013 07 ...