圖書內容
《Visual C++ 2017網路編程實戰》從初學者的角度出發,以通俗易懂的語言,配合豐富多彩的實例,詳細地介紹了使用Visual C++ 2017進行網路編程應該掌握的各方面知識,以及網路編程的常見場景和較難技術,快速提高開發技能。全書共分18章,內容包括
TCP/IP協定、本機網路信息編程、多執行緒編程、套接字編程、簡單網路伺服器設計、基於IO模型的網路開發、網路性能工具iperf的使用、WinInet開發瀏覽器實例、HTTP編程、Web編程、中國象棋網路對弈實例、winpcap編程、ICE網路編程和IPv6網路編程。
本書適合Visual C++網路編程初學者閱讀,可供開發人員查閱參考,也適合作為高等院校相關專業的教學參考書。
圖書目錄
1.1什麼是TCP/IP 1
1.2TCP/IP協定的分層結構 1
1.3套用層 5
1.3.1DNS 5
1.3.2連線埠的概念 6
1.4傳輸層 6
1.4.2UDP協定 7
1.5網路層 8
1.5.1IP協定 8
1.6.1數據鏈路層的基本概念 26
1.6.2數據鏈路層的主要功能 26
1.7一些容易混淆的術語 27
1.7.1MTU 27
1.7.2IP分組的分片問題 28
1.7.3數據段 28
1.7.4數據報 28
1.7.5數據包 28
1.7.6數據幀 29
1.7.7比特流 29
第2章本機網路信息編程 30
2.1獲取本地計算機的名稱和IP 30
2.1.1gethostname函式 30
2.1.2gethostbyname函式 30
2.1.3inet_ntoa函式 31
2.2獲取本機子網IP位址和子網掩碼 34
2.3獲取本機物理網卡地址信息 36
2.4獲取本機所有網卡(包括虛擬網卡)的列表和信息 38
2.5獲取本地計算機的IP協定統計數據 41
2.6獲取本機的DNS地址 44
2.7獲取本機上的TCP統計數據 46
2.8獲取本機上的UDP統計數據 49
2.9獲取本機上支持的網路協定信息 50
2.10獲取本地計算機的域名 52
第3章多執行緒編程 54
3.1多執行緒編程的基本概念 54
3.1.1為何要用多執行緒 54
3.1.2作業系統和多執行緒 54
3.1.3進程和執行緒 55
3.1.4執行緒調度 56
3.1.5執行緒函式 59
3.1.6執行緒對象和句柄 59
3.1.7執行緒對象的安全屬性 59
3.1.8執行緒標識 60
3.1.9多執行緒編程的3種庫 60
3.2利用Win32API函式進行多執行緒開發 60
3.2.1執行緒的創建 61
3.2.2執行緒的結束 65
3.2.3執行緒和MFC控制項互動 71
3.2.4執行緒的暫停和恢復 78
3.2.5訊息執行緒和視窗執行緒 81
3.2.6執行緒同步 84
3.3CRT庫中的多執行緒函式 97
3.4MFC多執行緒開發 105
3.4.1執行緒的創建 106
3.4.2執行緒同步 109
第4章套接字基礎 124
4.1套接字基本概念 124
4.1.1網路程式的架構 125
4.1.2套接字的類型 126
4.2套接字地址 127
4.2.1通用socket地址 127
4.2.2專用socket地址 128
4.2.3IP位址的轉換 129
4.2.5I/O工作模式和I/O模型 133
第5章TCP套接字編程 134
5.1TCP套接字編程的基本步驟 134
5.2協定簇和地址簇 134
5.3socket地址 136
5.3.1通用socket地址 137
5.3.2專用socket地址 138
5.3.3IP位址的轉換 139
5.3.4獲取套接字地址 141
5.4TCP套接字編程的相關函式 143
5.4.1WSAStartup函式 143
5.4.2socket/WSASocket函式 143
5.4.3bind函式 145
5.4.4listen函式 147
5.4.5accept/WSAAccept函式 147
5.4.6connect/WSAConnect函式 148
5.4.7send/WSASend函式 148
5.4.8recv/WSARecv函式 148
5.4.9closesocket函式 149
5.4.10inet_addr函式 149
5.4.11inet_ntoa函式 149
5.4.12htonl函式 149
5.4.13htons函式 150
5.4.15WSACleanup函式 151
5.5簡單的TCP套接字編程 151
5.6深入理解TCP編程 156
5.6.1數據傳送和接收涉及的緩衝區 156
5.6.2TCP數據傳輸的特點 157
5.6.3數據傳送的6種情形 157
5.6.4數據接收時碰到的情形 159
5.6.5一次請求回響的數據接收 160
5.6.6多次請求回響的數據接收 165
5.7I/O控制命令 176
5.8套接字選項 180
5.8.1基本概念 180
5.8.2選項的級別 180
5.8.3獲取套接字選項 182
5.8.4設定套接字選項 187
第6章UDP套接字編程 190
6.1UDP套接字編程的基本步驟 190
6.2UDP套接字編程的相關函式 192
6.2.1sendto/WSASendto函式 192
6.2.2recvfrom/WSARecvfrom函式 192
6.3實戰UDP套接字 192
6.4UDP丟包及無序問題 199
第7章原始套接字編程 200
7.1原始套接字概述 200
7.2原始套接字的強大功能 200
7.3原始套接字的基本編程步驟 202
7.3.1創建原始套接字函式socket 202
7.3.2接收函式recvfrom 204
7.3.3傳送函式sendto 206
7.4常規編程示例 206
7.5抓取所有IP數據包 214
7.6抓取所有IP數據包 220
第8章MFC套接字編程 227
8.1概述 227
8.2類CAsyncSocket 227
8.2.1基本概念 227
8.2.2成員函式 228
8.2.3基本用法 232
8.2.4網路事件處理 234
8.3類CSocket 243
8.3.1基本概念 243
8.3.2成員函式 244
8.3.3基本用法 245
8.4基於CAsyncSocket的網路五子棋 250
8.4.1概述 250
8.4.2五子棋簡介 251
8.4.3軟體總體架構 251
8.4.4棋盤類—CTable 252
8.4.5遊戲模式類—CGame 254
8.4.6訊息機制 256
8.4.7主要算法 259
第9章簡單的網路伺服器設計 266
9.1循環伺服器 266
9.1.1UDP循環伺服器 266
9.1.2TCP循環伺服器 267
9.2多執行緒並發伺服器 271
9.3I/O復用伺服器 272
第10章基於I/O模型的網路開發 273
10.1同步和異步 273
10.1.1同步 273
10.1.2異步 274
10.2阻塞和非阻塞 274
10.2.1阻塞 274
10.2.2非阻塞 275
10.3同步/異步和阻塞/非阻塞的關係 276
10.4I/O和網路I/O 276
10.5I/O模式 277
10.5.1阻塞模式 277
10.6I/O模型 278
10.7選擇模型 279
10.7.1基本概念 279
10.7.3實戰select模型 282
10.8異步選擇模型WSAAsyncSelect 288
10.8.1基本概念 288
10.8.2WSAAsyncSelect函式 289
10.9事件選擇模型 303
10.9.1基本概念 303
10.9.2WSAEventSelect函式 303
10.9.3實戰WSAEventSelect模型 304
10.10重疊I/O模型 309
10.10.1基本概念 309
10.10.2創建重疊I/O模型下的套接字 312
10.10.4基於事件通知(有64個socket的限制) 314
10.10.5基於完成例程 321
10.11完成連線埠 335
10.11.1基本概念 335
10.11.2完成連線埠能幹什麼 336
10.11.3完成連線埠的優勢 336
10.11.4完成連線埠編程的基本流程 337
10.11.5相關API 338
第11章網路性能工具iperf的使用 348
11.1iperf概述 348
11.2iperf的特點 348
11.3iperf的工作原理 348
11.4iperf的主要功能 350
11.5iperf中Linux下的使用 350
11.5.1在Linux下安裝iperf 351
11.5.2iperf的簡單使用 352
11.6iperf中Windows下的使用 353
11.6.1命令行版本 353
11.6.2圖形化版本 353
第12章WinInet開發Internet客戶端 355
12.1什麼是WinInet 355
12.2認識WinInetAPI函式 355
12.2.1通用WinInetAPI函式 356
12.2.3WinInetFTP函式 363
12.2.4WinInetGopher函式 364
12.2.5讀取HTTP網頁數據 364
12.3認識MFCWinInet類庫 366
12.3.2訪問FTP伺服器的流程 368
12.4FTP開發 369
12.4.1FTP概述 369
12.4.2FTP的工作原理 370
12.4.3FTP的傳輸方式 371
12.4.4FTP的工作方式 371
12.4.5FTP命令 372
12.4.6FTP應答碼 375
12.4.7開發FTP客戶端 377
第13章HTTP網路編程 390
13.1HTTP簡介 390
13.2HTTP的工作原理 390
13.3HTTP的特點 391
13.4HTTP的訊息結構 391
13.5客戶端請求訊息 392
13.6伺服器回響訊息 393
13.8HTTP狀態碼分類 394
13.9.1概述 395
13.9.2界面設計 395
13.9.3類CWebServerApp 396
13.9.4類CWebServerDlg 396
13.9.5類CLog 397
13.9.6類CGenericServer 398
13.9.7類CHTTPServer 404
13.9.8運行結果 409
第14章C++Web編程 411
14.1CGI程式的工作方式 411
14.3ActiveX、OLE和COM 415
14.4什麼是OCX 415
14.5ActiveX 416
14.6.1生成和註冊ActiveX控制項 416
14.6.2在網頁html中使用ActiveX控制項 420
14.6.4在測試容器中使用(測試)ActiveX控制項 424
14.6.5在網頁的JavaScript中使用控制項 426
14.7為ActiveX控制項添加對話框 428
14.8.1常用事件 432
14.8.2自定義事件 434
14.9為ActiveX控制項添加方法 438
14.9.1常用方法 438
14.9.2自定義方法 439
第15章中國象棋網上對弈系統 441
15.1電腦遊戲概述 441
15.2系統概述 442
15.3系統運行結果 443
15.4系統構成 443
15.5數據結構 443
15.5.1棋盤 443
15.5.2棋子信息數組 445
15.5.3變數與函式 445
15.6圖像繪製 446
15.6.1主視窗 446
15.6.2棋盤的繪製 447
15.6.3棋子的繪製及初始化 447
15.6.4動態顯示 448
15.6.5回看功能 449
15.7規則設定 449
15.7.1棋子規則 449
15.7.2規則算法 450
15.8網路通信 451
15.8.1CCOM類 451
15.8.2數據代碼 452
15.8.3數據更新 453
15.8.4聊天功能 453
15.9棋子操作 453
15.9.1獲取點擊 453
15.9.2走棋判斷 454
15.9.3游標變化 455
15.10主框架重要函式解析 455
15.10.1WinMain函式 455
15.10.2InitInstance函式 456
15.11通信函式解析 457
15.11.1Listen函式 457
15.11.2ListenThread函式 458
15.11.3SendMsg函式 460
15.12象棋業務邏輯重要函式解析 461
15.12.1Graphics函式 461
15.12.2Draw函式 462
15.12.3InitChessBoard函式 463
15.12.4ChessRule函式 464
第16章WinPcap編程 474
16.1什麼是WinPcap 474
16.2WinPcap的歷史 474
16.3WinPcap的功能 475
16.4WinPcap的套用領域 475
16.5WinPcap不能做什麼 476
16.6WinPcap組成結構 476
16.7WinPcap核心層NPF 477
16.8WinPcap的數據結構和主要功能函式 478
16.8.1網路接口的地址 478
16.8.2數據包頭的格式 479
16.8.3pcap檔案格式 479
16.8.4獲得網卡列表pcap_findalldevs 480
16.8.5釋放空間函式pcap_freealldevs 481
16.8.6打開網路設備函式pcap_open_live 481
16.8.7捕獲數據包pcap_loop 482
16.8.8捕獲數據包pcap_dispatch 483
16.8.9捕獲數據包pcap_next_ex 483
16.9搭建WinPcap的開發環境 484
16.9.1WinPcap通信庫的安裝 484
16.9.2準備開發包 486
16.9.3第一個WinPcap應用程式 487
16.9.4捕獲訪問Web站點的網路包 488
第17章ICE網路編程 494
17.1ICE簡介 494
17.2ICE的優勢 494
17.3ICE的工作原理 495
17.4ICE調用模式 495
17.5客戶端與伺服器端的結構 496
17.6ICE的下載、安裝和配置 496
17.6.1下載ICE 496
17.6.2安裝ICE 497
17.6.3安裝第三方庫 498
17.6.4配置ICE環境變數 499
17.7ICE的使用 500
第18章IPv6網路編程 501
18.1IPv4的現狀和不足 501
18.1.1地址空間、地址方案與選路的問題 502
18.1.2網路管理與配置的問題 505
18.1.3服務類型問題 507
18.1.4IP選項的問題 507
18.1.5IPv4安全性問題 508
18.2是增加補丁還是徹底升級改進 508
18.3IPv6的概念 509
18.4IPv6的發展歷史 509
18.5IPv6的特點 511
18.6IPv6地址 511
18.6.1IPv6地址表示方法 511
18.6.2IPv6前綴 513
18.6.3IPv6地址的類型 513
18.7IPv6數據報格式 517
18.8基於IPv6的Socket網路編程技術 522
18.8.1地址表示 522
18.8.2IPv6的Socket
API函式 523
18.8.3IPv6下編寫應用程式的注意點 524
18.8.4實戰IPv6 524