先來看看例子的第一部份,接收連線伺服器部份,如下:
//伺服器,主要接收新連線,並啟動新連線接收資料。
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...