天天看點

《Windows網絡與通信程式設計(第3版)》——1.4 網絡應用程式設計基礎

本節書摘來自異步社群《windows網絡與通信程式設計(第3版)》一書中的第1章,第1.4節,作者: 陳香凝 , 王烨陽 , 陳婷婷 , 張铮 更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。

本節講述網絡應用程式設計的原則和網絡程式開發環境的設定。

1.4.1 網絡程式體系結構

在建立網絡應用程式之前,首先要決定應用程式的體系結構。應用程式體系結構(application architecture)由應用程式開發者設計,它指定了在各種各樣的終端系統上,應用程式是如何組織的。本節介紹現有的主要體系結構:客戶機/伺服器體系結構、p2p體系結構和這兩種結構的混合。

1.客戶機/伺服器體系結構

在客戶機/伺服器體系結構中,有一個總是在運作的主機,稱為伺服器,它為來自其他許多稱為客戶的主機提供服務。客戶主機可以随時打開和關閉。最通俗的例子就是web應用程式:web伺服器總是打開的,等待用戶端程式(如ie浏覽器)的請求,通過向它們發送網頁資料響應這些請求。客戶機/伺服器體系結構有如下兩個特點:

(1)用戶端程式之間并不直接交流資訊,它們僅與伺服器通信。

(2)伺服器方有一個固定的、公開的位址,稱為ip位址(後面要讨論)。

伺服器有固定的位址,而且總是打開的,是以用戶端程式才能通過向伺服器位址發送封包與之進行通信。

2.p2p(peer-to-peer,點對點)體系結構

單純的p2p體系結構中,不再有總是運作的伺服器了,任意的兩台主機對(稱為peer)都可以直接互相通信。因為peer之間可以不經過特定的伺服器通信,是以這個體系結構稱為peer-to-peer,簡寫為p2p。在p2p結構中,不再需要任何機器總是打開的,也不再需要任何機器有固定的ip位址了。現在,網上有許多著名的p2p軟體,如瘋狂一時的bt、現今的emule、倍受青睐的qq等。

p2p體系結構的優點之一就是它的可伸縮性。例如,在p2p檔案共享程式中,數萬的peer也許會參與到其中,每個peer既作為伺服器向其他peer提供資源,又作為用戶端從其他peer下載下傳檔案。是以,每增加一個peer,不僅增加了對資源的需求,也增加了對資源的供給。

另一方面,p2p使用者高度分散,它們難以管理。如,有一個重要的檔案僅一個peer擁有,但是這個peer随時都有可能離開網絡。

實際上,單純使用p2p體系結構的程式很少,大都需要一個中心伺服器來維護總體狀态,初始化用戶端之間的連接配接等,這可以算是兩種體系結構的混合了。由于網絡結構不同,防火牆設定各異,程式設計時還會遇到更多的問題,如如何穿過内網防火牆、如何穿過nat等,後面會詳細介紹。

1.4.2 網絡程式通信實體

程序是通信的實體,它們在不同的終端系統上通過計算機網絡來交流資訊。發送程序建立消息,将之發送到網絡,接收程序接收這些消息,發送響應。

1.客戶和伺服器程序

對于互相通信的兩個程序,通常稱一方為客戶,另一方為伺服器。在web裡,浏覽器是客戶程序,web伺服器是伺服器程序。在p2p檔案共享系統裡,下載下傳檔案的peer稱為客戶,上傳檔案的peer稱為伺服器。下面給出客戶和伺服器程序的具體定義:

在一對程序的通信會話上下文中,初始化通信的程序稱為客戶,等待通信連接配接的程序稱為伺服器。

2.套接字(socket)

從一個程序發送到另一個程序的任何消息都必須經過下層網絡。程序從網絡中接收資料,向網絡發送資料都是通過它的套接字(socket)來進行的。為了了解程序和套接字的關系,我們打個比方,程序好比是一個房子,套接字便是房子的門。當程序向其他主機中的程序發送消息時,它将消息推出門(套接字)進入網絡。一旦消息到達目标主機,它穿過接收程序的門(套接字),傳遞給接收程序。是以,套接字便是主機内應用層和傳輸層的接口,也稱為程式和網絡間的api(application programming interface,應用程式程式設計接口)。本書在講述使用者模式網絡程式設計時,使用的主要是windows提供的套接字接口。

1.4.3 網絡程式開發環境

下載下傳sdk并安裝後,還要對visual c++開發環境進行設定。單擊菜單“tools/options...”,彈出options對話框,選擇directories頁籤,首先在“show directories for:”下拉菜單中選擇include files,将新sdk中頭檔案的目錄添加到“directories:”清單中,并将其移動到最上方,如圖1.8(左)所示,然後在“show directories for:”下拉菜單中選擇library files,進行同樣的設定,如圖1.8(右)所示。

《Windows網絡與通信程式設計(第3版)》——1.4 網絡應用程式設計基礎

https://yqfile.alicdn.com/81ed737e80c67769f7cdf2249a0e2950e2f23653.png" >

在講述核心網絡元件開發時,還需要下載下傳安裝windows ddk工具,後面再詳細說明。

編寫網絡程式,調試工具是必不可少的,這裡推薦使用免費工具dbgview,它可以友善地同時顯示核心模式和使用者模式下的調試資訊。

繼續閱讀