boost庫在工作(26)網路客戶端之一

2021-06-16 16:17:39 字數 1279 閱讀 9542

說到網路,就立即回想到2023年那時,上網只是為了收發一下email,沒有別的事情可做,並且大多數還是連線成區域性網的情況。在區域性網時,在乙個計算機房裡,最多只有10多台電腦聯機,這樣的區域性網只能幹一件事情,就是玩多人網路遊戲,這個多人只支援4個人一起玩。隨著時間推進,到2023年時就可以上網看新聞和使用qq了,這時網路主要用來聊天,玩遊戲的機會不多,做別的事情也不行,因為網路的速度很慢。到了2023年左右,網路終於快起來了,這時網路都使用adsl連線了,頻寬有1m左右,這時就可以玩網路遊戲沒有太大問題,看網上新聞和辦公都可行了。到目前,網路的頻寬都有4m以上了,看電影、看電視、打網路**,網上購物已經大行其道。隨著電商推進,網路已經深入地影響所有人的生活方方面面。比如,可以異地購物,在深圳這邊可以在網上下乙個禮物的訂單,把禮物直接送給北京的朋友。不再需要在深圳這邊的商場購物再快遞出去。又比如通過流動網路的叫計程車軟體,正在改變計程車行業的方方面面。以前計程車在大街上不斷地,沒有目標地轉來轉去,既沒有提高收益,也沒有節能環保。通過目前手機上打計程車軟體和手機gps定位的功能,可以很容易安排行車路線,提高計程車效率,也提高社會資源的利用率,更加可以減少能源消耗,更加環保了。可見,網路是乙個徹底地改變人們生活方方面面的工具,以前很多不可能的事情,目前都變成可能,變得更加有效地提高生產力。

既然網路那麼重要,網路的開發工作也變成重頭戲,在boost庫里會把網路的開發工作變得比較簡單,變得功能比較強大,模式比較清晰。網路組成的方式有很多種,比如x25網路、can網路、tcp/ip網路。在這裡主要介紹和學習是tcp/ip網路,由於目前這種網路的方式,已經是事實上的標準方式。tcp/ip網路裡,要表示乙個端點是通過ip位址來表現的,但ip位址對於不懂底層網路的人來說,是比較難記住的,因此人們給ip位址起乙個名稱,就叫做網域名稱。在一台主機裡,網路又可以提供多個服務,每個服務通過埠來表示,當然也會給埠起乙個名稱叫服務名稱。在ip位址和網域名稱之間相互的轉換,就叫做網域名稱解釋。為了把人們容易記住的ip位址字串和網域名稱轉換成網路底層的表示,在boost庫里引入了乙個類boost::asio::ip::tcp::resolver::query,用這個類來儲存ip位址、網域名稱、ip位址的型別、主機的埠或服務名稱。如下面的例子:

//#include "stdafx.h"

#include #include //測試網路服務查詢

void test(void)

int _tmain(int argc, _tchar* argv)

在上面的例子裡:query物件就是用來儲存網域名稱www.boost.org和服務名稱http,這樣就把人們容易記住的方式儲存起來了,但這樣並不能直接交給網路的底層去使用,還需進行轉換才可以。要想知道如何轉換,請看後面的例子。

boost庫在工作(27)網路客戶端之二

由於一台伺服器上可能存在多個服務,而每個服務使用了不同的埠,因而對一台伺服器的查詢,就可能返回多個服務的埠。為了表示多個服務,需要使用乙個列表來表達多個服務存在。而訪問乙個列表,通常使用迭代設計模式來訪問整個列表。因此就會使用下面的 來進行網域名稱解釋 include stdafx.h includ...

boost庫在工作(28)網路客戶端之三

當客戶端連線伺服器時,在客戶端這裡存在兩種操作方式 同步和非同步方式。同步方式,就是客戶端傳送連線之後,一直等伺服器回應,或者超時出錯。非同步方式,就是客戶端傳送連線之後,不等伺服器回應,就可以執行後面的 當有回應時再通知客戶端連線成功的 執行。這兩種方式上,同步方式比非同步方式簡單,如果使用在要求...

boost庫在工作(29)網路客戶端之四

include stdafx.h include include include include bool sendrecvdata boost asio ip tcp socket socket 測試網路服務查詢,連線。void test void 解釋成功之後,顯示解釋後的ip位址和埠。輸出解發...