Windows網路編程案例教程

Windows網路編程案例教程

Windows網路編程是指基於Windows作業系統提供的網路編程框架實現網路套用的開發。微軟圍繞Windows平台構建了一個包羅萬象的強大的網路編程技術體系,並提供了強力集成開發環境Visual Studio,來幫助編程者高效工作。 單機時代,寫一手好程式,是很值得引以為傲的,但這並不代表網路時代,能寫好的網路程式。儘管那句“網路就是計算機”的語錄時常在網路世界裡迴響。網路和單機還是有很大的不同,網路編程需要處理主機之間的通信,處理同步、異步,處理阻塞、非阻塞,主機間可能是對等的,也可能是客戶機和伺服器要區別對待……這一系列的問題,都需要編程者去思考,去解決。 《Windows網路編程案例教程》 語言生動流暢,分析深入淺出,步驟精煉,圖文並茂。注重套用、強調實踐,案例編碼覆蓋主流技術和方法。 全書內容豐富,涵蓋了網路編程模型、P2P網路模型、Windows網路編程、WinSock2 API編程、阻塞/非阻塞模式套接字編程、異步套接字編程、Blocking I/O編程、select I/O編程、WSAAsyncSelect I/O編程、WSAEventSelect I/O編程、Overlapped I/O編程、I/O Completion Port編程、MFC套接字編程、WinInet API編程、MFC WinInet編程、FTP編程、HTTP編程、SMTP/POP3編程、Windows多執行緒編程、WinPcap編程、網路五子棋的設計與實現等。

目錄

第1章網路編程概述

1.1網路編程模型

1.1.1開放系統互連參考模型

1.1.2 TCP/IP協定棧模型

1.1.3套接字編程模型

1.1.4網間多執行緒會話模型

1.2 P2P網路模型

1.2.1 P2P的發展背景

1.2.2三代P2P網路

1.2.3 P2P網路分類

1.2.4 P2P典型套用舉例

1.3 Windows網路編程

1.3.1Windows網路編程框架

1.3.2Windows網路協定

1.3.3Windows Sockets編程模型

1.3.4WinSock2工作模式

1.3.5第一個網路程式——hostent

習題1

第2章 WinSock2 API編程

2.1Win32 API窗體編程

2.1.1彈出一個訊息框

2.1.2創建一個窗體

2.1.3為窗體添加控制項

2.2WinSock2 API編程框架

2.2.1WinSock2 API程式結構

2.2.2WinSock2 API庫函式

2.2.3WinSock2的新發展

2.3阻塞/非阻塞模式套接字編程

2.3.1阻塞模式套接字客戶機編程

2.3.2阻塞模式套接字伺服器編程

2.3.3非阻塞模式套接字客戶機編程

2.3.4非阻塞模式套接字伺服器編程

2.3.5套接字錯誤處理

2.4異步套接字編程

2.4.1異步套接字客戶機編程

2.4.2異步套接字伺服器編程

2.4.3伺服器回響多客戶機的並發訪問

2.5WinSock2 I/O模型編程

2.5.1Blocking I/O模型

2.5.2select I/O模型

2.5.3WSAAsyncSelect I/O模型

2.5.4WSAEventSelect I/O模型

2.5.5Overlapped I/O模型

2.5.6I/O Completion Port模型

2.5.7I/O模型的選擇

習題2

第3章 MFC套接字編程

3.1MFC套接字編程模型

3.1.1MFC編程框架

3.1.2CAsyncSocket類編程模型

3.1.3CSocket類編程模型

3.1.4派生套接字類

3.1.5MFC套接字類的阻塞/非阻塞模式

3.2CAsyncSocket類編程實例

3.2.1點對點通信功能和技術要點

3.2.2創建客戶機

3.2.3客戶機代碼分析

3.2.4創建伺服器

3.2.5伺服器代碼分析

3.2.6點對點通信客戶機與伺服器聯合測試

3.3CSocket類編程實例

3.3.1聊天室功能和技術要點

3.3.2創建聊天室伺服器

3.3.3聊天室伺服器代碼分析

3.3.4創建聊天室客戶機

3.3.5聊天室客戶機代碼分析

3.3.6聊天室客戶機與伺服器聯合測試

習題3

第4章 Windows Internet編程

4.1WinInet API編程

4.1.1WinInet HINTERNET句柄

4.1.2WinInet通用API

4.1.3關閉HINTERNET句柄

4.2WinInet FTP編程

4.2.1FTP API簡介

4.2.2FTP伺服器檔案目錄遍歷

4.2.3FTP伺服器目錄導航

4.2.4創建和刪除FTP伺服器目錄

4.2.5從FTP伺服器上獲取檔案

4.2.6上傳檔案到FTP伺服器

4.2.7從FTP伺服器上刪除檔案

4.2.8FTP伺服器目錄或檔案的重命名

4.3WinInet HTTP編程

4.3.1HTTP API基本操作

4.3.2HTTP Cookies編程

4.3.3HTTP Authentication編程

4.3.4HTTP URL編程

4.3.5獲取HTTP請求的頭部信息

習題4

第5章 MFC Internet編程

5.1MFC WinInet概述

5.1.1MFC WinInet基本類

5.1.2MFC WinInet類之間的關聯

5.1.3MFC WinInet客戶機編程步驟

5.1.4MFC WinInet經典編程模型

5.2簡易FTP客戶機編程實例

5.2.1FTP客戶機/伺服器模型

5.2.2功能定義與技術要點

5.2.3FTP伺服器的搭建

5.2.4簡易FTP客戶機的創建步驟

5.2.5主要代碼

5.2.6系統測試

5.3HTTP瀏覽器編程實例

5.3.1瀏覽器/伺服器工作模型

5.3.2MFC CHtmlView編程模型

5.3.3MFCIE的功能和技術要點

5.3.4MFCIE的創建步驟

5.3.5MFCIE功能測試

習題5

第6章 SMTP/POP3編程

6.1SMTP協定

6.1.1SMTP工作模型

6.1.2SMTP命令解析

6.1.3SMTP回響狀態碼

6.2POP3協定

6.2.1POP3工作模型

6.2.2POP3命令解析

6.2.3用POP3命令與163信箱會話

6.3MIME郵件擴展

6.3.1MIME對電子郵件協定的擴展

6.3.2MIME對郵件信頭的擴展

6.3.3MIME郵件的內容類型

6.3.4Base64編碼

6.4SMTP協定編程實例

6.4.1SMTP傳送郵件工作模型

6.4.2功能和技術要點

6.4.3項目創建步驟

6.4.4主要代碼

6.4.5項目測試

6.5POP3協定編程實例

6.5.1POP3客戶機工作模型

6.5.2功能和技術要點

6.5.3項目創建步驟

6.5.4項目測試

習題6

第7章 Windows多執行緒編程

7.1進程與執行緒

7.1.1進程與執行緒的關係

7.1.2Windows進程的記憶體結構

7.1.3Windows執行緒的優先權

7.2用C和Win32 API編寫多執行緒

7.2.1Win32 API執行緒編程

7.2.2用C語言編寫多執行緒

7.2.3執行緒同步

7.2.4創建多執行緒的步驟

7.2.5多執行緒程式——笑臉

7.3用C++和MFC編寫多執行緒

7.3.1MFC執行緒類

7.3.2用戶界面執行緒

7.3.3工作執行緒

7.3.4執行緒同步類

7.3.5MFC多執行緒程式——腳踏車比賽

習題7

第8章 WinPcap編程

8.1WinPcap概述

8.1.1WinPcap的功能

8.1.2Wireshark網路分析工具

8.1.3WinDump網路嗅探工具

8.1.4WinPcap的獲取和安裝

8.1.5WinPcap工作模型

8.1.6NPF與NDIS的關係

8.1.7NPF工作模型

8.1.8WinPcap開發環境配置

8.2WinPcap編程框架

8.2.1結構體與宏定義

8.2.2WinPcap API函式

8.2.3過濾器表達式

8.2.4程式的創建和測試

8.3WinPcap編程套用

8.3.1獲取網路設備列表

8.3.2打開適配器捕獲數據包

8.3.3捕獲和列印所有數據包

8.3.4過濾數據包

8.3.5分析數據包

8.3.6統計網路流量

習題8

第9章 網路五子棋

9.1五子棋簡介

9.1.1棋盤和棋子

9.1.2五子棋術語

9.1.3行棋規則

9.1.4五子棋的人機博弈

9.1.5如何判斷勝負

9.2人機對戰系統設計

9.2.1功能需求

9.2.2創建項目程式框架

9.2.3導入資源檔案

9.2.4主選單設計

9.2.5人機對戰項目類圖

9.2.6訊息結構體設計

9.2.7人機對戰邏輯模型

9.2.8遊戲基類CGame的設計

9.2.9人機對戰類COneGame的設計

9.2.10棋盤類CTable的設計

9.2.11界面類CFiveDlg的設計

9.2.12項目測試

9.3網路對戰系統設計

9.3.1擴展功能需求

9.3.2定義對話訊息

9.3.3網路對戰新增界面元素

9.3.4網路對戰基本類圖

9.3.5網路對戰通信模型

9.3.6CFiveSocket類的設計

9.3.7CTwoGame類的設計

9.3.8修改CTable類的設計

9.3.9CServerDlg類和CClientDlg類的設計

9.3.10CNameDlg類和CStatDlg類的設計

9.3.11完善CFiveDlg類的設計

9.3.12項目測試

習題9

案例目錄

程式1.1主機名稱和地址解析完整代碼20

程式2.1彈出一個訊息框完整代碼25

程式2.2創建一個窗體完整代碼31

程式2.3為窗體添加控制項完整代碼36

程式2.4阻塞模式套接字客戶機完整代碼48

程式2.5阻塞模式套接字伺服器完整代碼52

程式2.6非阻塞模式套接字客戶機完整代碼54

程式2.7非阻塞模式套接字伺服器完整代碼56

程式2.8套接字錯誤處理完整代碼61

程式2.9異步套接字客戶機完整代碼65

程式2.10異步套接字伺服器完整代碼73

程式2.11伺服器回響多客戶機的並發訪問完整代碼81

程式2.12TcpClient客戶機程式完整代碼89

程式2.13select I/O模型回送伺服器完整代碼93

程式2.14WSAEventSelect I/O模型回送伺服器完整代碼107

程式2.15用完成連線埠開發回聲伺服器完整代碼120

程式3.1點對點通信客戶機完整代碼148

程式3.2點對點通信伺服器完整代碼161

程式3.3聊天室伺服器完整代碼178

程式3.4聊天室客戶機完整代碼191

程式4.1Internet數據下載通用例程1206

程式4.2Internet數據下載通用例程2208

程式4.3獲取FTP檔案目錄並顯示通用例程210

程式4.4遍歷FTP伺服器目錄並在列表框中顯示214

程式4.5更改當前目錄並顯示216

程式4.6在FTP伺服器上創建新目錄217

程式4.7從FTP伺服器上刪除目錄218

程式4.8從遠程伺服器下載檔案219

程式4.9上傳檔案到FTP伺服器220

程式4.10從FTP伺服器上刪除檔案221

程式4.11FTP伺服器目錄或檔案的重命名222

程式4.12建立WWW連線224

程式4.13讀取Cookie227

程式4.14創建會話Cookie和持久Cookie228

程式4.15用InternetErrorDlg處理HTTP驗證229

程式4.16用InternetSetOption處理HTTP驗證230

程式4.17用HttpQueryInfo獲取HTTP請求的頭部信息232

程式5.1創建一個最簡單的瀏覽器237

程式5.2用HTTP下載一個Web頁面並顯示238

程式5.3用FTP下載一個檔案238

程式5.4遍歷目錄247

程式5.5下載檔案248

程式5.6上傳檔案249

程式6.1Base64編碼、解碼程式278

程式7.1列印變數的記憶體地址292

程式7.2用CreateThread創建兩個計數執行緒297

程式7.3用C語言編寫字元飄移執行緒303

程式7.4用C語言編寫多執行緒同步實例1305

程式7.5用C語言編寫多執行緒同步實例2307

程式7.6笑臉程式完整代碼308

程式7.7用戶界面執行緒用於伺服器套接字編程315

程式7.8工作執行緒的創建和調用317

程式7.9腳踏車比賽程式完整代碼318

程式8.1獲取網路設備列表完整代碼340

程式8.2打開適配器並捕獲數據包完整代碼342

程式8.3捕獲和列印所有數據包完整代碼344

程式8.4PacketFilter數據包過濾器完整代碼347

程式8.5捕獲UDP數據包並分析其頭部完整代碼350

程式8.6監聽TCP網路流量完整代碼355

程式9.1遊戲基類CGame的定義370

程式9.2人機對戰類COneGame的定義372

程式9.3人機對戰類COneGame的實現373

程式9.4人機對戰類CTable的定義380

程式9.5人機對戰類CTable的實現381

程式9.6主界面類CFiveDlg的定義388

程式9.7主界面類CFiveDlg的實現389

程式9.8套接字通信類CFiveSocket的定義396

程式9.9套接字通信類CFiveSocket的實現397

程式9.10網路對戰類CTwoGame的定義398

程式9.11網路對戰類CTwoGame的實現398

程式9.12修改棋盤類CTable400

正文摘要

網際網路編程有兩個主流方向: 一個是Web開發; 另一個是網路編程。從套用層面看,前者看起來相對高端,後者看起來偏中低端。大家耳熟能詳的網站類套用,如網易、搜狐、新浪、淘寶等屬於前者,稱做Web套用。而另一些“遍地開花”的套用,如QQ、MSN、迅雷、PPLive、Skype、防火牆、網路監控、流量計費、IIS伺服器、Tomcat伺服器等屬於後者,稱做網路工具。
開發Web套用,它的底層支撐平台是Web伺服器; 開發網路工具,它的底層支撐平台是作業系統。大家所說的Web開發和網路編程一個高端、一個中低端即源於此。如果硬要在二者之間劃出一個嚴格的界限是不甚妥當的。網際網路的技術趨勢是你中有我,我中有你,相互融合,“上九天攬月,下五洋捉鱉”可謂當下網際網路編程的真實寫照。本書內容定位於網路工具的編程方法,基礎根基是作業系統,不討論基於Web伺服器的Web編程。
通常,用Java語言編的程式離不開JVM虛擬機支持,用C#語言編的程式離不開.NET虛擬機支持,且Java語言和C#語言非常適合Web編程。Windows作業系統是用C/C++語言編寫的,顯然,C/C++更適合網路編程這門課,更適合開發網際網路中神通廣大、中流砥柱的套用。
《Windows網路編程案例教程》設計了兩條教學主線: 一條是基於Windows API編程; 另一條是基於MFC編程。對於前者,具體到WinSock2 API編程; 對於後者,具體到CAsyncSocket類、CSocket類編程。這兩條教學主線相互對照,相得益彰,構成本書教學的核心和靈魂。
《Windows網路編程案例教程》內容共分為9章。第1章網路編程概述,討論了網路編程模型、P2P網路模型、Windows網路編程。第2章WinSock2 API編程,講述Win32 API窗體編程、WinSock2 API編程框架、阻塞/非阻塞模式套接字編程、異步套接字編程、BlockingI/O編程、select I/O編程、WSAAsyncSelect I/O編程、WSAEventSelect I/O編程、Overlapped I/O編程、Completion Port編程。第3章MFC套接字編程,講述MFC套接字編程模型、CAsyncSocket類編程、CSocket類編程。第4~6章分別講述了Windows Internet編程、MFC Internet編程和SMTP/POP3編程。第7章Windows多執行緒編程,講述了用C和Win32 API編寫多執行緒以及用C++和MFC編寫多執行緒兩種方法。第8章WinPcap編程,講述了WinPcap編程框架和WinPcap編程套用。第9章網路五子棋,從實戰角度詳細講述人機對戰和網路對戰項目的設計。
《Windows網路編程案例教程》適合有C/C++語言基礎的讀者學習,每一章都配有精選的案例或程式片段,有助於讀者反覆揣摩、練習提高。本書完整的案例都在VC++2010環境下調試通過,涵蓋了主流技術和方法,體現了教學目的,貼近實際套用。
網際網路如同一個巨大的天體飛船,裹挾著整個地球,全人類、全社會為之瘋狂,為之飛奔。人們無從準確地知曉它的終點,更無從清晰地預見它的未來,能夠唯一感受到的是它驚人的發展速度,能夠唯一體會到的是它無窮的變化方式。或許正因如此,網際網路編程是極具魅力與挑戰的,吸引著越來越多的人進入這個行業。

《Windows網路編程案例教程》針對有C/C++語言基礎的網路編程初學者,以WinSock API和MFC Sockets為編程主線,以通俗易懂的方法介紹Windows平台下的網路編程方法,引導讀者循序漸進地提高網路編程能力。
《Windows網路編程案例教程》語言生動流暢,分析深入淺出,步驟精煉,圖文並茂。注重套用、強調實踐,案例編碼覆蓋主流技術和方法,能夠幫助讀者快速地學以致用。可作為各類學校的網路編程專業教材,也可作為網路編程人員的自學參考用書。

套接字摘要

套接字在TCP/IP協定棧中的位置關係 套接字在TCP/IP協定棧中的位置關係

套接字禁止了從應用程式直接訪問傳輸層的複雜性。在日常生活中兩個人打電話,那個電話機就可以理解為是通話的接口,只要會用電話機,甭管電話間是如何複雜連線的,通話隨時隨地可以輕鬆完成。套接字就像那個電話機,編程者只要掌握了套接字技術(類似電話機的使用方法),那么網路編程(就像打電話)工作就非常簡單了。至於套接字與下層的關係,則由作業系統來實現和封裝,因此,套接字簡化網路編程。

套接字與作業系統和應用程式的關係 套接字與作業系統和應用程式的關係

對多數作業系統而言,應用程式和作業系統程式是在不同的保護模式下運行的。應用程式一般不能直接訪問作業系統內部的資源,這樣可以避免應用程式非法破壞作業系統的運行。為此,作業系統需要提供應用程式編程接口(Application Programming Interface,API)給應用程式,使其能夠利用作業系統提供的服務。對於網路作業系統,需要為網路應用程式提供網路編程接口實現網路通信。目前多數作業系統提供了套接字(Socket)接口作為網路編程接口。

Berkeley套接字(BSD套接字)是4.2 BSD Unix作業系統(於1983發布)提供的一套應用程式編程接口,是一個用C語言寫成的網路應用程式開發庫,主要用於實現網間進程通信。Berkeley套接字後來成為其它現代作業系統參照的事實工業標準。Windows作業系統在後來的BSD4.3版基礎上實現了自己的Windows Socket(又稱WinSock)套接字編程接口。

相關詞條

相關搜尋

熱門詞條

聯絡我們