Windows網絡程序設計完全講義
-
【作 者】高守傳 周書鋒
【I S B N 】978-7-5084-7429-8
【責任編輯】張玉玲
【適用讀者群】科技
【出版時間】2010-05-19
【開 本】16開
【裝幀信息】平裝(光膜)
【版 次】第1版第1次印刷
【頁 數】
【千字數】665
【印 張】25
【定 價】¥48
【叢 書】暫無分類
【備注信息】
簡介
本書特色
前言
章節列表
精彩閱讀
下載資源
相關圖書
網絡程序設計是當前各種程序設計中最活躍的一個分支,幾乎滲透到各種應用場合。在Windows網絡程序設計中,基于套接字的編程方式又是一種比較常見而且最為靈活的網絡應用程序設計方法。本書從簡單的網絡通信協議入手,介紹了Windows中常見網絡程序的設計方法,主要包括TCP/IP協議、網絡服務、MFC網絡編程、WinInet、ISAPI、Internet、HTTP協議、SMTP/POP3協議、代理協議、原始套接字等。此外,還對通用的數據包捕獲驅動WinPcap進行簡要介紹,并給出了捕獲示例,最后結合現實需要對遠程控制的相關技術進行說明,并給出了實現的例子。
全書內容豐富,講解細膩,在對理論進行闡述的同時,結合具體實踐給出了相應的實現代碼,具有較強的針對性,力求使讀者通過理論聯系實際,掌握Windows網絡程序設計的一般方法,學習盡可能多的知識。同時,對于開發中可能會遇到的問題也都給出了相應的提示或說明。
本書定位于初、中級讀者,同時也可用作高等院校計算機及通信專業低年級學生的參考教材。
(1)以RFC網絡協議為基礎,以TCP/IP協議為主線。避免了一般同類書籍脫離RFC且無側重討論的問題。
(2)緊密結合學習實踐需要,精選多個典型實例。以實用和興趣為引導,避免枯燥且脫離實際的學習,進而提高了學習效率。
(3)以解決實際問題為原則,代碼緊湊而不冗余,而且在關鍵處還配有大量的代碼注釋。以最小的篇幅和最簡單的代碼將復雜問題簡單化,利于讀者消化和吸收。
(4)對于部分難點、疑點,編者還在書中以“說明”或“注釋”的形式向讀者提供有關背景,這樣便于讀者對正文的理解。
(5)全書編配了大量的插圖用以解釋“流程”、“結構”、“框架”等抽象概念,以輔助讀者對相關概念從抽象到具體的轉化,從而實現準確地理解。
隨著計算機網絡尤其是Internet的迅猛發展,人類社會已經進入了以網絡技術為基礎的信息化時代,網絡應用滲透到生活的各個領域,即使在我們這樣的發展中國家,普及程度也相當可觀。2009年7月16日,中國互聯網絡信息中心(CNNIC)發布的統計報告顯示,截至2009年6月30日,我國網民規模已達3.38億,居世界第一位。網絡的普及大大改變了人們的傳統習慣,拓展了新的媒體形式。但是,真正提供服務的卻是構建在其上的各種類型的網絡應用軟件,通過這些軟件提供的服務,人們可以進行網上購物、收發電子郵件、實現家庭辦公、進行視頻點播及遠程教育等。
TCP/IP協議是Internet的核心,在制定TCP/IP協議的目標時就已指出,任何人都能方便地使用Internet,并在其上開發出滿足不同需要的應用程序。本書即是參照TCP/IP協議的這一要求,并圍繞TCP/IP協議,在Windows環境中實現網絡程序的設計。
本書的主要內容如下:
第1章作為本書的開篇,也是TCP/IP協議的基礎,介紹了常見的網絡模型,同時還介紹了尋址方法與數據包在網絡中的傳遞過程。
第2章詳細介紹Windows中套接字的相關知識,主要包括套接字規范、Winsock編程基礎、連接與無連接通信知識、套接字選項與I/O控制等,最后分別給出連接與無連接通信的例子來加深讀者對二者的理解。
第3章介紹Windows套接字的5種I/O操作模型,即select模型(又稱選擇模型)、WSAAsyncSelect模型(又稱異步選擇模型)、WSAEventSelect模型(又稱事件選擇模型)、重疊I/O模型和完成端口模型,同時分別給出它們的具體實現,最后對各個模型進行了簡單比較,以便幫助讀者選擇合適的編程模型。
第4章介紹Windows網絡服務的編程方法,因為大多數網絡服務是以系統服務的方式提供,所以有必要通過本章來學習Windows服務程序的設計方法。
第5章介紹MFC中提供的套接字類,并對如何通過它們進行網絡編程進行詳細介紹,結尾給出了一個使用它們進行網絡聊天室開發的實例。
第6章介紹WinInet、ISAPI與Internet編程的具體細節,這些標準簡化了C/S模式的Internet編程方法。
第7~9章介紹TCP/IP協議族中的應用層協議,主要包括HTTP協議、SMTP協議、POP3協議、SOCKS5代理協議等。作為網絡應用程序的設計人員,在理解TCP/IP協議工作原理的基礎上,應用層協議應是關注的重點,這也是本書以此3章來介紹應用層協議的目的所在。
第10章介紹原始套接字的相關知識,包括Windows對原始套接字的支持情況、如何使用原始套接字等,最后給出兩個例子分別實現了不同的用途,其中包括在ICMP協議中的應用和數據捕獲方面的應用。
第11章介紹WinPcap的相關知識,作為Windows環境中經典的數據包捕獲驅動庫,WinPcap的應用非常廣泛,最后給出WinPcap在數據捕獲方面的應用實例。
第12章介紹遠程控制的相關知識,包括連接方式、隱藏技術、啟動方式、文件捆綁、鍵盤記錄等,最后給出一個簡單的控制實例,讀者可以應用本章介紹的知識對此實例進行擴展,以實現一個具有較強功能的遠程控制軟件。
本書定位于初、中級讀者,也可用作高等院校計算機及通信專業低年級學生的參考教材。在編寫時,力求做到淺顯易懂,并配有大量插圖幫助讀者理解,在程序設計實例中注釋也比較詳細,以便讀者自學。網絡程序設計是一門實踐性較強的課程,對讀者來說,只有在理解相關理論的基礎上進行大量的動手實踐,才能學好網絡程序設計,因此,建議讀者在學習過程中一定要邊學習邊實踐,以達到學習效率的最大化。
除署名作者外,參加編寫的人員還有陶志杰、蔣海東、賀文思、劉挺、李洪峻、姚曉玉等。由于時間倉促,加之作者水平有限,書中難免會有不足之處,真誠歡迎各位讀者予以批評指正,聯系郵箱winsock2010@sohu.com。
編 者
2010年1月
第1章 網絡模型 1
1.1 功能分層 1
1.2 OSI模型 2
1.2.1 OSI層次結構 2
1.2.2 OSI各層功能 3
1.2.3 OSI層間通信 5
1.2.4 OSI數據封裝及解封裝 6
1.3 TCP/IP協議簇 8
1.3.1 TCP/IP層次結構 8
1.3.2 TCP/IP各層功能 9
1.3.3 TCP/IP與OSI模型比較 10
1.3.4 Internet層——IP協議 11
1.3.5 傳輸層——TCP協議 12
1.3.6 TCP連接的建立與終止 13
1.3.7 傳輸層——UDP協議 17
1.3.8 Windows 2003 TCP/IP結構模型 18
1.4 LAN模型 20
1.4.1 IEEE 802概述 20
1.4.2 以太網標準 21
1.5 尋址方法 23
1.6 數據包在網絡中的傳遞 24
1.7 本章小結 26
第2章 Windows套接字基礎 27
2.1 套接字簡介 27
2.1.1 Berkeley套接字 27
2.1.2 Windows套接字規范 28
2.2 Windows Sockets 28
2.2.1 Windows Sockets 1.0 28
2.2.2 Windows Sockets 1.1 28
2.3 Windows Sockets 2 29
2.3.1 Windows Sockets 2簡介 29
2.3.2 同時訪問多個傳輸協議 30
2.3.3 與WinSock 1.1的兼容性 31
2.3.4 功能擴展機制 32
2.3.5 多線程中的應用 32
2.3.6 分散/聚集I/O支持 33
2.4 WinSock編程基礎 33
2.4.1 WinSock API 33
2.4.2 網絡程序結構 36
2.4.3 端口的概念 37
2.4.4 字節順序 37
2.4.5 出錯的處理 39
2.4.6 WinSock庫的初始化及釋放 40
2.5 面向連接的通信 42
2.5.1 socket與WSASocket 42
2.5.2 綁定套接字bind 44
2.5.3 監聽listen 46
2.5.4 accept與WSAAccept 47
2.5.5 send與WSASend 48
2.5.6 recv與WSARecv 50
2.5.7 connect與WSAConnect 52
2.5.8 closesocket 53
2.6 無連接通信 54
2.6.1 sendto與WSASendto 55
2.6.2 recvfrom與WSARecvfrom 56
2.7 套接字選項與I/O控制 58
2.7.1 套接字選項 58
2.7.2 套接字I/O控制 61
2.8 套接字工作模式 63
2.9 流式套接字編程實例 64
2.9.1 TCP服務端設計 64
2.9.2 TCP客戶端設計 66
2.10 數據報套接字編程實例 68
2.10.1 UDP服務端設計 68
2.10.2 UDP客戶端設計 70
2.11 本章小結 72
第3章 Windows Socket I/O模型 73
3.1 select模型 73
3.1.1 select函數 73
3.1.2 select模型應用 76
3.2 WSAAsyncSelect模型 82
3.2.1 WSAAsyncSelect函數 83
3.2.2 異步選擇模型應用 85
3.3 WSAEventSelect模型 90
3.3.1 WSAEventSelect函數 91
3.3.2 事件選擇模型輔助API 91
3.3.3 事件選擇模型應用 94
3.4 重疊I/O模型 98
3.4.1 重疊套接字I/O概述 98
3.4.2 完成例程 100
3.4.3 完成例程應用 102
3.4.4 基于事件的通知 106
3.4.5 事件對象應用 107
3.5 完成端口模型 110
3.5.1 完成端口簡介 111
3.5.2 完成端口模型API 111
3.5.3 完成端口應用 113
3.6 模型比較 116
3.7 本章小結 116
第4章 網絡服務 117
4.1 服務程序 117
4.1.1 程序入口 117
4.1.2 服務主函數 118
4.1.3 服務控制處理器函數 119
4.1.4 更新服務狀態及相關結構 119
4.2 服務配置 120
4.2.1 服務的安裝 121
4.2.2 服務的卸載 122
4.3 服務控制 122
4.3.1 服務的啟動 122
4.3.2 服務控制請求 123
4.4 網絡服務實例 124
4.4.1 主函數main 124
4.4.2 服務主函數ServiceMain 126
4.4.3 控制處理器函數ServiceCtrlHandler 127
4.4.4 服務配置實現 127
4.4.5 服務控制實現 130
4.5 本章小結 133
第5章 MFC套接字網絡編程 134
5.1 MFC基礎與網絡類庫 134
5.1.1 MFC基礎 134
5.1.2 MFC中的網絡開發相關類 134
5.2 CAsyncSocket類及其開發 137
5.2.1 CAsyncSocket類 137
5.2.2 CAsyncSocket類的編程模式 138
5.2.3 CAsyncSocket類的異步機制 141
5.2.4 使用CAsyncSocket類實現信息
轉發器(服務端) 142
5.2.5 使用CAsyncSocket類實現信息
轉發器(客戶端) 145
5.3 CSocket類及其開發 147
5.3.1 CSocket類 147
5.3.2 CSocket類的編程模式 148
5.3.3 CSocket類的同步(阻塞)機制 149
5.3.4 使用CSocket類的阻塞模式
進行通信 151
5.4 網絡聊天室開發實例 154
5.4.1 服務器端程序的開發 154
5.4.2 客戶端程序的開發 157
5.5 本章小結 159
第6章 WinInet、ISAPI與Internet編程 160
6.1 WinInet基礎 160
6.1.1 WinInet API函數 160
6.1.2 WinInet API函數的使用 162
6.1.3 MFC WinInet類庫概述 165
6.1.4 MFC WinInet類庫的使用 166
6.2 使用MFC WinInet開發網絡應用 168
6.2.1 WinInet開發客戶端程序的流程 168
6.2.2 WinInet開發查詢Web網站程序 170
6.3 利用ISAPI擴展開發CGI程序 171
6.3.1 CGI基礎 171
6.3.2 CGI應用實例 172
6.3.3 ISAPI基礎 174
6.3.4 使用MFC開發ISA程序的
基本方法 174
6.3.5 使用MFC開發ISA程序實例 177
6.4 本章小結 180
第7章 HTTP協議 181
7.1 資源標識 181
7.1.1 統一資源標識符 181
7.1.2 HTTP統一資源定位符 183
7.2 HTTP協議 184
7.2.1 協議版本 185
7.2.2 協議參數 186
7.2.3 HTTP消息 187
7.2.4 HTTP實體 190
7.2.5 HTTP連接 190
7.3 HTTP服務器實例 191
7.3.1 主函數 191
7.3.2 初始化及等待連接 192
7.3.3 服務線程 196
7.3.4 解析請求 200
7.4 本章小結 204
第8章 郵件傳輸 205
8.1 電子郵件簡介 205
8.2 電子郵件的格式 206
8.2.1 RFC 822電子郵件格式 207
8.2.2 MIME電子郵件格式 211
8.3 SMTP協議 215
8.3.1 SMTP通信模型 215
8.3.2 SMTP命令 216
8.3.3 SMTP響應 219
8.3.4 使用SMTP發送郵件的步驟 220
8.4 SMTP服務擴展 221
8.4.1 EHLO命令 221
8.4.2 AUTH命令 222
8.5 電子郵件的認證 222
8.5.1 AUTH LOGIN機制 223
8.5.2 AUTH PLAIN機制 223
8.5.3 CRAM-MD5機制 224
8.6 發送郵件實例 225
8.6.1 主函數實現 225
8.6.2 獲取服務端響應 228
8.6.3 認證實現 228
8.6.4 Base64編解碼 229
8.6.5 郵件發送 232
8.7 POP3協議 236
8.7.1 POP3命令 236
8.7.2 POP3狀態 240
8.7.3 使用POP3操作郵箱的步驟 240
8.8 接收郵件實例 240
8.8.1 主函數實現 241
8.8.2 獲取服務端響應 243
8.8.3 獲取郵件/郵箱屬性信息 243
8.8.4 讀取郵件 245
8.8.5 刪除郵件 246
8.9 本章小結 247
第9章 代理服務器 248
9.1 代理服務器簡介 248
9.1.1 代理服務器功能 248
9.1.2 代理服務器分類 251
9.2 HTTP代理 252
9.3 HTTP代理服務器實例 253
9.3.1 主函數main 253
9.3.2 代理線程 254
9.3.3 轉發請求與響應 255
9.3.4 TCP數據交換 259
9.4 SOCKS5協議 263
9.4.1 SOCKS5 TCP代理 263
9.4.2 SOCKS5 UDP代理 265
9.4.3 SOCKS5對認證的支持 266
9.5 SOCKS5代理實例 266
9.5.1 主函數main 267
9.5.2 認證實現 268
9.5.3 代理線程 270
9.5.4 代理模式檢測 273
9.5.5 獲取地址、端口及UDP數據 274
9.5.6 創建UDP套接字 275
9.5.7 UDP代理線程 276
9.6 本章小結 279
第10章 原始套接字 280
10.1 原始套接字簡介 280
10.1.1 原始套接字簡史 280
10.1.2 原始套接字與網絡安全 281
10.2 Windows與原始套接字 282
10.2.1 原始套接字支持 283
10.2.2 數據發送 284
10.2.3 數據接收 284
10.3 如何使用原始套接字 285
10.3.1 創建原始套接字 285
10.3.2 原始套接字的協議參數 286
10.3.3 頭包含選項 287
10.3.4 發送原始數據包示例 287
10.4 ICMP協議 290
10.4.1 ICMP協議簡介 291
10.4.2 校驗和計算 293
10.4.3 Ping程序實現 294
10.4.4 Tracert實現 297
10.5 數據包捕獲 297
10.5.1 數據包捕獲流程 298
10.5.2 數據包捕獲實現 298
10.6 本章小結 300
第11章 WinPcap應用 301
11.1 WinPcap基礎 301
11.1.1 WinPcap結構 301
11.1.2 NPF的主要功能及其結構 303
11.1.3 WinPcap工作框架 305
11.2 WinPcap編程接口 306
11.2.1 UNIX兼容API 306
11.2.2 WinPcap擴展API 311
11.3 WinPcap嗅探實例 313
11.3.1 主函數 314
11.3.2 回調函數 317
11.3.3 協議頭部 317
11.3.4 數據包處理 319
11.4 本章小結 320
第12章 遠程控制技術 321
12.1 遠程控制的概念 321
12.2 連接方式 322
12.2.1 直接指定 322
12.2.2 通過第三方獲取 322
12.3 線程插入 324
12.3.1 遠程插入DLL 324
12.3.2 插入DLL實例 326
12.3.3 遠程插入功能代碼 329
12.3.4 插入代碼實例 329
12.4 啟動方式 333
12.4.1 注冊表鍵 333
12.4.2 自動運行文件 334
12.4.3 Windows服務 335
12.4.4 注冊為服務 337
12.4.5 文件關聯 337
12.4.6 其他方式 339
12.5 被控端配置 340
12.5.1 附加信息 340
12.5.2 預留配置 343
12.6 信息隱藏 348
12.6.1 文件隱藏 348
12.6.2 進程隱藏 349
12.7 捆綁文件 350
12.7.1 捆綁原理 350
12.7.2 Win32圖標 352
12.7.3 圖標選擇 355
12.7.4 圖標操作 356
12.7.5 更新資源 359
12.7.6 捆綁實例 361
12.8 鍵盤記錄 367
12.8.1 Win32掛鉤簡介 367
12.8.2 掛鉤相關的API 368
12.8.3 全局掛鉤 369
12.8.4 實例介紹 370
12.9 遠程控制開發 373
12.9.1 管道技術 374
12.9.2 被控端開發 376
12.9.3 主控端開發 379
12.10 本章小結 381
附錄A IP協議號 382
附錄B 以太網類型字段 386
附錄C 常見端口 388
附錄D ASCII表 390
參考文獻 392