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

2021-06-16 16:40:23 字數 939 閱讀 9296

先來看看例子的第一部份,接收連線伺服器部份,如下:

//伺服器,主要接收新連線,並啟動新連線接收資料。

class cserver

//收到客戶端連線進來事件響應。

void handleaccept(boost::shared_ptr< cconnect > pnewconnect,

const boost::system::error_code& error) }

private:

//io服務

boost::asio::io_service& m_ioservice;

//接收器,用來接收新連線進來。

boost::asio::ip::tcp::acceptor m_acceptor;

};//

int _tmain(int argc, _tchar* argv)

在這個例子裡,伺服器物件主要使用

boost::asio::io_service

物件,這個物件主要用來構造非同步接收資料使用,接著定義

boost::asio::ip::tcp::acceptor

物件,這個物件主要用來接收所有連線進來到伺服器的連線,也就是起到監聽的作用。在伺服器類的建構函式裡主要呼叫接受物件的

async_accept

方法發起監聽連線的作用,就是等著客戶端連線過來,如果不發起連線,是收不到任何連線的。當伺服器收到乙個客戶端連線進來時,就會響應函式

cserver

類的handleaccept

函式,在這個函式裡主要做以下工作:把剛連線進來的連線啟動處理這個客戶端的資料,然後建立乙個新連線,以便接收下乙個客戶端連線進來。在上面的**裡,可以看到使用

boost::shared_ptr

智慧型指標,這樣每個連線都是使用共享智慧型指標的方式來管理,只要這個連線存在,就不會刪除連線占用的記憶體。

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

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

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

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

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

在這個例子裡,伺服器物件主要使用boost asio io service物件,這個物件主要用來構造非同步接收資料使用,接著定義boost asio ip tcp acceptor物件,這個物件主要用來接收所有連線進來到伺服器的連線,也就是起到監聽的作用。在伺服器類的建構函式裡主要呼叫接受物件的as...