內容簡介
隨著Internet技術的套用和普及,人類社會已經進入了信息化的網路時代。大多數應用程式都是運行在網路環境下,這就要求程式設計師能夠在套用最廣泛的Windows作業系統上開發網路應用程式。本教程結合大量的實例,介紹了開發Windows網路應用程式的必備知識,並完整地講述了幾個Windows網路應用程式實例的開發過程。這些實例包括區域網路探測器、基於P2P技術的BT下載工具和基於WinPcap技術的網路數據包捕獲、過濾和分析工具等。
圖書目錄
第1篇 基礎協定
第1章 Internet與網路通信模型概述 1
1.1 Internet概述 1
1.1.1 Internet的發展歷史 1
1.1.2 Internet的管理機構 3
1.1.3 國內Internet網路建設的現狀 5
1.2 網路通信模型和協定簇 6
1.2.1 OSI參考模型 6
1.2.2 TCP/IP協定簇體系結構 11
習題 12
第2章 TCP/IP協定簇及其套用 14
2.1 IP 14
2.1.1 IP基礎 14
2.1.2 IP的關鍵機制 16
2.2 TCP和UDP 17
2.2.1 TCP的網路功能 17
2.2.2 TCP段結構 18
2.2.3 TCP的基本工作流程 20
2.2.4 UDP 22
2.3 其他常用協定 23
2.3.1 ARP 23
2.3.2 ICMP 26
2.3.3 Telnet 28
2.3.4 FTP 29
2.3.5 SMTP和POP3 31
習題 32
第3章 IP位址和子網規劃 34
3.1 IP位址 34
3.1.1 IP位址的結構 34
3.1.2 IP位址的分類 35
3.1.3 特殊的IP位址 37
3.2 子網劃分 38
3.2.1 子網 38
3.2.2 子網掩碼 39
3.2.3 CIDR表示法 45
3.2.4 單播、組播和廣播地址 46
習題 49
第2篇 網路編程
第4章 網路編程基礎 50
4.1 網路編程相關的基本概念 50
4.1.1 網路編程與進程通信 50
4.1.2 Internet中網間進程的標識 53
4.1.3 網路協定的特徵 56
4.1.4 高效的用戶數據報協定 59
4.1.5 可靠的傳輸控制協定 59
4.2 三類網路編程 61
4.2.1 基於TCP/IP協定棧的網路編程 61
4.2.2 基於WWW套用的網路編程 62
4.2.3 基於.NET框架的Web Services網路編程 62
4.3 客戶機/伺服器互動模式 65
4.3.1 網路套用軟體的地位和功能 65
4.3.2 客戶機/伺服器模式 66
4.3.3 客戶機與伺服器的特性 67
4.3.4 容易混淆的術語 67
4.3.5 客戶機與伺服器的通信過程 68
4.3.6 網路協定與C/S模式的關係 69
4.3.7 錯綜複雜的C/S互動 69
4.3.8 伺服器如何同時為多個客戶機服務 70
4.3.9 標識一個特定服務 71
4.4 P2P模式 72
4.4.1 P2P技術的興起 72
4.4.2 P2P的定義和特徵 73
4.4.3 P2P的發展 73
4.4.4 P2P的關鍵技術 74
4.4.5 P2P系統的套用與前景 74
習題 75
第5章 Socket編程基礎 76
5.1 Socket網路編程接口的產生與發展 76
5.1.1 Socket編程接口起源於UNIX作業系統 76
5.1.2 Socket編程接口在Windows和Linux作業系統中得到繼承和發展 77
5.2 Socket的工作原理和基本概念 77
5.2.1 Socket協定的工作原理 77
5.2.2 什麼是Socket 78
5.2.3 Socket的服務方式和類型 78
5.3 WinSock編程基礎 79
5.3.1 構建WinSock應用程式框架 79
5.3.2 IP位址的表示形式 82
5.4 面向連線的Socket編程 84
5.4.1 面向連線的Socket通信流程 84
5.4.2 socket()函式 85
5.4.3 bind()函式 86
5.4.4 listen()函式 87
5.4.5 accept()函式 88
5.4.6 recv()函式 90
5.4.7 send()函式 91
5.4.8 closesocket()函式 93
5.4.9 shutdown()函式 94
5.4.10 connect()函式 94
5.4.11 TCP Socket伺服器應用程式編程實例 95
5.4.12 TCP Socket客戶端應用程式編程實例 100
5.5 面向非連線的Socket編程 104
5.5.1 面向非連線的Socket通信流程 104
5.5.2 sendto()函式 105
5.5.3 recvfrom()函式 106
5.6 Socket選項 108
5.6.1 調用getsockopt()函式獲取Socket選項 108
5.6.2 調用setsockopt()函式設定Socket選項 111
習題 113
第6章 探測網路中的線上設備 114
6.1 獲取本地計算機的網路信息 114
6.1.1 使用ipconfig命令獲取本地網路信息 114
6.1.2 獲取本地網路信息的開發接口IP Helper API 115
6.1.3 獲取本地網路適配器信息 116
6.1.4 獲取本地主機名、域名和DNS伺服器信息 120
6.1.5 獲取本地計算機網路接口的基本信息 124
6.1.6 獲取本地計算機IP位址表 127
6.1.7 添加和刪除IP位址 130
6.2 掃描子網中的地址 135
6.2.1 計算指定子網內包含的所有IP位址 135
6.2.2 實現ping的功能 139
6.2.3 掃描子網 146
習題 154
第7章 NetBIOS網路編程技術 156
7.1 NetBIOS協定及套用 156
7.1.1 NetBIOS協定 156
7.1.2 使用NBTSTAT命令 159
7.2 NetBIOS開發接口 160
7.2.1 NetBIOS操作 160
7.2.2 NCB結構體 161
7.2.3 其他常用NetBIOS結構體 165
7.2.4 Netbios()函式 167
7.2.5 獲取LANA上的所有NetBIOS名字 168
7.2.6 獲取網路適配器上的MAC地址 172
7.3 在程式中實現NBTSTAT命令的功能 174
7.3.1 本實例的工作原理 174
7.3.2 定義的結構體 175
7.3.3 為獲取NetBIOS信息而定義的函式 175
7.3.4 實現NBTSTAT命令功能的主函式 180
習題 181
第8章 高級Socket編程技術 182
8.1 Socket編程模型概述 182
8.2 阻塞與非阻塞模式Socket編程 184
8.2.1 設定非阻塞模式Socket 184
8.2.2 非阻塞模式伺服器應用程式編程實例 185
8.2.3 非阻塞模式客戶端應用程式編程實例 189
8.2.4 基於非阻塞模式的多執行緒伺服器應用程式編程實例 192
8.3 基於Select模型的Socket編程 195
8.3.1 select()函式 195
8.3.2 基於Select模型的伺服器應用程式實例 196
8.4 基於WSAAsyncSelect模型的Socket編程 203
8.4.1 WSAAsyncSelect()函式 203
8.4.2 創建視窗 204
8.4.3 視窗例程 207
8.4.4 基於WSAAsyncSelect模型的伺服器編程 208
8.5 基於WSAEventSelect模型的Socket編程 213
8.5.1 WSAEventSelect()函式 213
8.5.2 創建和管理事件對象 214
8.5.3 WSAWaitForMultipleEvents()函式 215
8.5.4 WSAEnumNetworkEvents()函式 216
8.5.5 基於WSAEventSelect模型的伺服器編程 216
8.6 基於重疊I/O模型的Socket編程 221
8.6.1 WSASocket()函式 221
8.6.2 調用WSASend()函式傳送數據 222
8.6.3 調用WSARecv()函式接收數據 223
8.6.4 GetOverlappedResult()函式 224
8.6.5 使用事件通知來管理重疊I/O操作 224
8.6.6 使用完成例程來管理重疊I/O操作 227
8.7 基於完成連線埠模型的Socket編程 231
8.7.1 完成連線埠模型的工作原理 231
8.7.2 創建完成連線埠對象 232
8.7.3 等待重疊I/O的操作結果 233
8.7.4 基於完成連線埠模型的伺服器應用程式實例 234
習題 240
第9章 基於WinPcap技術的網路數據包捕獲、過濾和分析技術 242
9.1 WinPcap技術基礎 242
9.1.1 WinPcap的體系結構 242
9.1.2 NIC驅動器和NDIS 243
9.1.3 網路組包過濾(NPF)模組 244
9.1.4 捕獲數據包的原理和步驟 246
9.2 下載和安裝WinPcap開發包 247
9.2.1 下載WinPcap 247
9.2.2 安裝WinPcap 249
9.2.3 原始碼的目錄結構 250
9.3 在Visual C++中使用WinPcap技術 251
9.3.1 環境配置 251
9.3.2 獲取與網路適配器綁定的設備列表 252
9.3.3 獲取網路適配器的高級屬性信息 255
9.3.4 打開網路適配器並實現抓包功能 258
9.3.5 不使用事件處理器進行抓包 262
9.3.6 過濾數據包 265
9.3.7 分析數據包 266
習題 271
第3篇 實例套用
第10章 設計區域網路探測器 273
10.2 基礎模組設計 274
10.2.1 基礎函式 274
10.2.2 本地主機類CLocalhost 277
10.2.3 設備類CDevice 279
10.2.4 子網類CSubnet 279
10.3 系統主界面設計 289
10.3.1 系統主界面中包含的控制項 289
10.3.2 設計選單項 290
10.4 載入和退出主界面 291
10.4.1 載入主界面的代碼實現 291
10.4.2 在文本編輯框中輸出描述信息 295
10.4.3 自動調整控制項的大小 296
10.4.4 退出系統並保存自定義子網 297
10.5 管理子網 297
10.5.1 添加和編輯子網 297
10.5.2 刪除子網 301
10.6 掃描指定的子網 302
10.6.1 設計執行掃描子網操作的對話框 303
10.6.2 啟動子網掃描 305
10.7 檢測子網的狀態 305
10.7.1 設計檢測子網狀態的對話框 306
10.7.2 啟動狀態檢測 308
第11章 設計基於P2P技術的BT下載工具 310
11.1 P2P技術的工作原理和套用 310
11.1.1 P2P技術的工作原理 310
11.1.2 P2P網路模型 312
11.1.3 BT下載 313
11.1.4 FTKernelAPI兼容BT協定網路核心庫 315
11.2 系統主界面設計 317
11.2.1 系統主界面中包含的控制項 317
11.2.2 設計選單項 318
11.2.3 設計工具列 318
11.3 載入主視窗 320
11.3.1 載入主視窗的代碼實現 321
11.3.2 在StartContext()函式中初始化FTKernelAPI環境 322
11.3.3 在InitNatTunnel()函式中初始化穿透區域網路的操作 326
11.4 實現BT下載 328
11.4.1 打開種子檔案 328
11.4.2 開始下載 337
11.4.3 停止下載 342
11.4.4 顯示下載進度 343
11.4.5 刪除檔案 347
11.4.6 打開目錄 348