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

2021-06-16 16:19:47 字數 970 閱讀 2132

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

//#include "stdafx.h"

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

void test(void)

//解釋成功之後, 顯示解釋後的ip位址和埠。

boost::asio::ip::tcp::endpoint endpoint = iterator->endpoint();

std:: cout << "host_ip: " << endpoint.address() << " port: " << endpoint.port() << std::endl;

}int _tmain(int argc, _tchar* argv)

在這個例子裡,使用query來表示乙個伺服器的位址和服務型別,使用io_service來執行乙個io上的操作,使用resolver來表示乙個網域名稱和服務型別的解釋操作,使用endpoint來表示乙個端點的存在。所謂有端點,就是乙個ip位址、乙個服務、一種型別的綜合體。就算同乙個ip,同乙個服務,也會有兩個端點,因為ip位址的型別有兩種:ipv4和ipv6。通過resolver物件解釋回來的端點endpoint是直接可以使用到boost網路庫的物件使用。如果存在多個端點的情況,就需要進行乙個遍歷操作,以便找到合適的端點連線。當然,也會有解發布錯的情況,或者根本就不存在這個伺服器,那麼從resolver解釋返回的結果集就會是空,這樣它可以跟乙個定義為空集的端點itend進行比較了,避免再進行下面的操作。

這個例子執行正確地輸出如下:

請按任意鍵繼續. . .

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

說到網路,就立即回想到1997年那時,上網只是為了收發一下email,沒有別的事情可做,並且大多數還是連線成區域性網的情況。在區域性網時,在乙個計算機房裡,最多只有10多台電腦聯機,這樣的區域性網只能幹一件事情,就是玩多人網路遊戲,這個多人只支援4個人一起玩。隨著時間推進,到1999年時就可以上網看...

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

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

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

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