『壹』 求推薦一本 VC++網路編程 的好書
Windows網路與通信程序設計(第2版)王艷平這本書寫的非常好,我燃租和有本王艷平寫的windows程序設型芹計,寫得很好,我自己不做網路開發,就沒有買網路的那本書!不過推薦你看看,真的很不錯!
本書將編程方法、網路協議和應用實例有機結合起來,詳細闡明Windows網路編程的各方面內容。本書首先介紹Windows平台上進行網路編程的基礎知識,包括網路硬體、術語、協議、Winsock編程介面和各種I/O方法等;然後通過具體實例詳細講述當前流行的高性能可伸縮伺服器設計、IP多播和Internet廣播、P2P程序設計、原始套接字、SPI、協議驅動的開發和原始以太數據的發送、ARP欺騙技術、LAN和WAN上的掃描和偵測技術、個人防火牆與網路封包截獲技術等;最後講述IP幫助函數和E-mail的開發方法。本書結構緊湊,內容由淺入...
第1章計算機網路基礎1
1.1網路的概念和網路的組成1
1.2計算機網路參考模型2
1.2.1協議層次2
1.2.2TCP/IP參考模型2
1.2.3應用層(ApplicationLayer)3
1.2.4傳輸層(TransportLayer)3
1.2.5網路層(NetworkLayer)3
1.2.6鏈路層(LinkLayer)4
1.2.7物理層(PhysicalLayer)4
1.3網路程序定址方式4
1.3.1MAC地址4
1.3.2IP地址5
1.3.3子網定址6
1.3.4埠號8
1.3.5網路地址轉換(NAT)8
1.4網路應用程序設計基礎10
1.4.1網路程序體系結構10
1.4.2網路程序通信實體11
1.4.3網路程序開發環境12
第2章Winsock編程介面13
2.1Winsock庫13
2.1.1Winsock庫的裝入和釋放13
2.1.2封裝CInitSock類14
2.2Winsock的定址方式和位元組順序14
2.2.1Winsock定址14
2.2.2位元組順序16
2.2.3獲取地址信息17
2.3Winsock編程詳解20
2.3.1Winsock編程流程20
2.3.2典型過程圖23
2.3.3TCP伺服器和客戶端程序舉例24
2.3.4UDP編程26
2.4網路對時程序實例28
2.4.1時間協議(TimeProtocol)28
2.4.2TCP/IP實現代碼29
第3章Windows套接字I/O模型31
3.1套接字模式31
3.1.1阻塞模式31
3.1.2非阻塞模式31
3.2選擇(select)模型32
3.2.1select函數32
3.2.2應用舉例33
3.3WSAAsyncSelect模型36
3.3.1消息通知和WSAAsyncSelect函數36
3.3.2應用舉例37
3.4WSAEventSelect模型40
3.4.1WSAEventSelect函數40
3.4.2應用舉例42
3.4.3基於WSAEventSelect模型的伺服器設計44
3.5重疊(Overlapped)I/O模型53
3.5.1重疊I/O函數53
3.5.2事件通知方式56
3.5.3基於重疊I/O模型的伺服器設計56
第4章IOCP與可伸縮網路程序67
4.1完成埠I/O模型67
4.1.1什麼是完成埠(completionport)對象67
4.1.2使用IOCP的方法67
4.1.3示常式序69
4.1.4恰當地關閉IOCP72
4.2Microsoft擴展函數72
4.2.1GetAcceptExSockaddrs函數73
4.2.2TransmitFile函數73
4.2.3TransmitPackets函數74
4.2.4ConnectEx函數75
4.2.5DisconnectEx函數76
4.3可伸縮伺服器設計注意事項76
4.3.1內存資源管理76
4.3.2接受連接的方法77
4.3.3惡意客戶連接問題77
4.3.4包重新排序問題78
4.4可伸縮伺服器系統設計實例78
4.4.1CIOCPServer類的總體結構78
4.4.2數據結構定義和內存池方案皮盯82
4.4.3自定義幫助函數85
4.4.4開啟服務和停止服務88
4.4.5I/O處理線程93
4.4.6用戶介面和測試程序99
第5章互聯網廣播和IP多播100
5.1套接字選項和I/O控制命令100
5.1.1套接字選項100
5.1.2I/O控制命令102
5.2廣播通信103
5.3IP多播(Multicasting)105
5.3.1多播地址105
5.3.2組管理協議(IGMP)105
5.3.3使用IP多播106
5.4基於IP多播的組討論會實例110
5.4.1定義組討論會協議110
5.4.2線程通信機制111
5.4.3封裝CGroupTalk類111
5.4.4程序界面117
第6章原始套接字121
6.1使用原始套接字121
6.2ICMP編程121
6.2.1ICMP與校驗和的計算121
6.2.2Ping程序實例124
6.2.3路由跟蹤126
6.3使用IP頭包含選項129
6.3.1IP數據報格式129
6.3.2UDP數據報格式131
6.3.3原始UDP封包發送實例133
6.4網路嗅探器開發實例134
6.4.1嗅探器設計原理135
6.4.2網路嗅探器的具體實現136
6.4.3偵聽區域網內的密碼138
6.5TCP通信開發實例140
6.5.1創建一個原始套接字,並設置IP頭選項140
6.5.2構造IP頭和TCP頭140
6.5.3發送原始套接字數據報142
6.5.4接收數據146
第7章Winsock服務提供者介面(SPI)147
7.1SPI概述147
7.2Winsock協議目錄148
7.2.1協議特性149
7.2.2使用WinsockAPI函數枚舉協議150
7.2.3使用WinsockSPI函數枚舉協議151
7.3分層服務提供者(LSP)153
7.3.1運行原理153
7.3.2安裝LSP154
7.3.3移除LSP158
7.3.4編寫LSP159
7.3.5LSP實例161
7.4基於SPI的數據報過濾實例165
7.5基於Winsock的網路聊天室開發171
7.5.1服務端171
7.5.2客戶端171
7.5.3聊天室程序的設計說明172
7.5.4核心代碼分析172
第8章Windows網路驅動介面標准(NDIS)和協議驅動的開發176
8.1核心層網路驅動176
8.1.1Windows2000及其後產品的網路體系結構176
8.1.2NDIS網路驅動程序177
8.1.3網路驅動開發環境178
8.2WDM驅動開發基礎181
8.2.1UNICODE字元串181
8.2.2設備對象181
8.2.3驅動程序的基本結構183
8.2.4I/O請求包(I/Orequestpacket,IRP)和I/O堆棧183
8.2.5完整驅動程序示例186
8.2.6擴展派遣介面188
8.2.7應用舉例(進程診測實例)191
8.3開發NDIS網路驅動預備知識198
8.3.1中斷請求級別(InterruptRequestLevel,IRQL)198
8.3.2旋轉鎖(SpinLock)198
8.3.3雙鏈表199
8.3.4封包結構199
8.4NDIS協議驅動200
8.4.1注冊協議驅動200
8.4.2打開下層協議驅動的適配器201
8.4.3協議驅動的封包管理202
8.4.4在協議驅動中接收數據203
8.4.5從協議驅動發送封包204
8.5NDIS協議驅動開發實例204
8.5.1總體設計204
8.5.2NDIS協議驅動的初始化、注冊和卸載206
8.5.3下層NIC的綁定和解除綁定209
8.5.4發送數據217
8.5.5接收數據219
8.5.6用戶IOCTL處理225
第9章網路掃描與檢測技術233
9.1網路掃描基礎知識233
9.1.1乙太網數據幀233
9.1.2ARP234
9.1.3ARP格式236
9.1.4SendARP函數237
9.2原始以太封包的發送238
9.2.1安裝協議驅動238
9.2.2協議驅動用戶介面238
9.2.3發送以太封包的測試程序244
9.3區域網計算機掃描245
9.3.1管理原始ARP封包246
9.3.2ARP掃描示例249
9.4互聯網計算機掃描253
9.4.1埠掃描原理253
9.4.2半開埠掃描實現254
9.5ARP欺騙原理與實現259
9.5.1IP欺騙的用途和實現原理259
9.5.2IP地址沖突260
9.5.3ARP欺騙示例261
第10章點對點(P2P)網路通信技術264
10.1P2P穿越概述264
10.2一般概念265
10.2.1NAT術語265
10.2.2中轉265
10.2.3反向連接266
10.3UDP打洞267
10.3.1中心伺服器267
10.3.2建立點對點會話267
10.3.3公共NAT後面的節點267
10.3.4不同NAT後面的節點268
10.3.5多級NAT後面的節點269
10.3.6UDP空閑超時270
10.4TCP打洞271
10.4.1套接字和TCP埠重用271
10.4.2打開點對點的TCP流271
10.4.3應用程序看到的行為272
10.4.4同步TCP打開273
10.5Internet點對點通信實例273
10.5.1總體設計273
10.5.2定義P2P通信協議274
10.5.3客戶方程序275
10.5.4伺服器方程序287
10.5.5測試程序291
第11章核心層網路封包截獲技術294
11.1Windows網路數據和封包過濾概述294
11.1.1Windows網路系統體系結構圖294
11.1.2用戶模式下的網路數據過濾295
11.1.3內核模式下的網路數據過濾296
11.2中間層網路驅動PassThru296
11.2.1PassThruNDIS中間層驅動簡介296
11.2.2編譯和安裝PassThru驅動297
11.3擴展PassThruNDISIM驅動——添加IOCTL介面297
11.3.1擴展之後的PassThru驅動(PassThruEx)概況297
11.3.2添加基本的DeviceIoControl介面298
11.3.3添加綁定枚舉功能302
11.3.4添加ADAPT結構的引用計數307
11.3.5適配器句柄的打開/關閉函數308
11.3.6句柄事件通知315
11.3.7查詢和設置適配器的OID信息315
11.4擴展PassThruNDISIM驅動——添加過濾規則323
11.4.1需要考慮的事項323
11.4.2過濾相關的數據結構324
11.4.3過濾列表326
11.4.4網路活動狀態327
11.4.5IOCTL控制代碼328
11.4.6過濾數據331
11.5核心層過濾實例339
第12章Windows網路防火牆開發技術342
12.1防火牆技術概述342
12.2金羽(Phoenix)個人防火牆淺析343
12.2.1金羽(Phoenix)個人防火牆簡介343
12.2.2金羽(Phoenix)個人防火牆總體設計344
12.2.3金羽(Phoenix)個人防火牆總體結構345
12.3開發前的准備345
12.3.1常量的定義346
12.3.2訪問規則348
12.3.3會話結構348
12.3.4文件結構349
12.3.5UNICODE支持355
12.4應用層DLL模塊356
12.4.1DLL工程框架356
12.4.2共享數據和IO控制362
12.4.3訪問控制列表ACL(AccessList)364
12.4.4查找應用程序訪問許可權的過程367
12.4.5類的介面——檢查函數370
12.5核心層SYS模塊373
12.6主模塊工程375
12.6.1I/O控制類375
12.6.2主應用程序類377
12.6.3主對話框中的屬性頁380
12.6.4主窗口類381
12.7防火牆頁面383
12.7.1網路訪問監視頁面383
12.7.2應用層過濾規則頁面387
12.7.3核心層過濾規則頁面397
12.7.4系統設置頁面403
第13章IP幫助函數406
13.1IP配置信息406
13.1.1獲取網路配置信息406
13.1.2管理網路介面408
13.1.3管理IP地址412
13.2獲取網路狀態信息415
13.2.1獲取TCP連接表415
13.2.2獲取UDP監聽表418
13.2.3獲取IP統計數據420
13.3路由管理427
13.3.1獲取路由表427
13.3.2管理特定路由431
13.3.3修改默認網關的例子432
13.4ARP表管理433
13.4.1獲取ARP表433
13.4.2添加ARP入口434
13.4.3刪除ARP入口434
13.4.4列印ARP表的例子434
13.5進程網路活動監視實例438
13.5.1獲取通信的進程終端438
13.5.2Netstate源程序代碼439
第14章Email協議及其編程444
14.1概述444
14.2電子郵件介紹445
14.2.1電子郵件Internet的地址445
14.2.2Internet郵件系統445
14.2.3電子郵件信頭的結構及分析446
14.3SMTP原理448
14.3.1SMTP原理分析448
14.3.2SMTP工作機制449
14.3.3SMTP命令碼和工作原理449
14.3.4SMTP通信模型450
14.3.5SMTP的命令和應答451
14.4POP3協議原理452
14.4.1POP3協議簡介452
14.4.2POP3工作原理453
14.4.3POP3命令原始碼454
14.4.4POP3會話實例459
14.5實例分析與程序設計460
14.5.1總界面設計460
14.5.2SMTP客戶端設計461
14.5.3POP3客戶端設計473
『貳』 c語言的網路編程特點有哪些(在線等待,答得好馬上給分!)
1. C語言的特點
C語言是一種廣受歡迎的結構化程序設計語言,具有極強的生命力.
"C語言無所不能!" :適用面比較廣,具有高級語言的優點和低級語言特點
與硬體無關,可移植性強
C語言是一門簡潔語言:僅有32個關鍵字,9種控制語句
在所有高級語言中,目標代碼質量高,運行效率最高
結構化,模塊化語言,非常適合結構化程序設計.
2.結構化程序設計方法
結構化程序設計方法強調程序設計風格和程序結構的規范化,提倡清晰的結構.
特點:
自頂向下,逐步細化:將問題分解為子問題,將子問題分解為再小的模塊.直到該模塊我們可以很容易地求解為止.
模塊化設計:對每個模塊,用結構化的方法加以設計.
結構化編碼:對每個模塊,分別編寫對應的函數.
目標:
便於多人分工協作完成大型軟體;便於代碼維護;
C語言的編程
3. C語言基本概念
Hello World! 示例
int main()
{ printf("Hello, world!");
return 0; }
函數 結構化,模塊化的基礎
主函數main()
庫函數:數學函數,字元串函數,io函數,內存分配函數
scanf, printf,…
C語言的編程
C語言基本概念(數據表達)
數據類型:整型,實型,字元型
數組:同種數據類型的元素的集合;下標引用
指針: (基本要求:看懂別人的程序)
注:建議掌握計算機硬體工作原理,如直接定址,間接定址;至少掌握變數的存儲方式 (《C程序設計》p201)
1) 指針即地址;指針變數是用於存放地址的變數
2) 指針可以與整型變數一樣運算;
3)★ 指針必須具備合法地址才可用;
C語言的編程
C語言基本概念(數據表達)
結構 (構造類型)
是由不同數據類型的數據組成的集合體;
struct student /*定義結構體類型*/
{ char name[20];
int sex;
int age;
char addr[100]; };
注:結構體變數不能作為一個整體參加數據處理;
struct student Wang2;
Wang2.age=22;
C語言的編程
C語言基本概念(程序結構)
表達式:算術,關系,邏輯,賦值,函數
語句
順序結構,選擇結構(if語句,switch語句),
循環結構(while語句,for語句與do while語句)
函數:輸入輸出函數
文件:永久保存數據的方式
流式文件;FILE結構體;文件io函數;(p309)
C程序的編寫與上機調試
4. C程序的編寫與上機調試
Hello World! 示例
cl
tc2.0 (略)
vc6.0: 規范的project操作示範
(1) new一個空的基於console的project;
(2) 創建c文件,並輸入代碼;
(3) 將c文件加入project;
(4) 編譯,調試,運行;
對軟體開發成本高和進度估計不準確.
用戶對已完成的"軟體系統"不滿意.
軟體產品的質量不可靠.
軟體的維護困難,維護的人員與費用不斷增加.
缺乏完整,正確的文檔資料.
軟體成本在計算機系統中所佔比例逐年上升.
軟體的發展跟不上硬體的發展和用戶的要求.
軟體的規模非常龐大,多人共同開發,必須有嚴格和科學的管理.
軟體開發過分依賴於個人的智力勞動和經驗.
學習指針最好是先學些計算機硬體工作的原理,例如:直接定址,間接定址等,只有了解了這些內容以後,你再學指針就比較容易理會,畢竟C語言是一門介於機器語言與高級語言中間的語言,沒有一些硬體工作知識是很難領悟它的真諦的.
1.指針是地址變數:它的值有兩種:其一是地址,其二是內容.不同的表達方式可以取不同的值,這有點象一個家庭地址在不同的場合標識的人物也不同.例如:父母親在他們的單位所登記的家庭地址就代表他們自己,而你在學校中登記的同樣的家庭地址就代表你自己.
2.指針是可以運算的,它的運演算法則與變數是一致的.
另外,在編寫一個程序時,除非萬不得已,一般不要使用指針變數.建議各位對於指針只要能看懂就行!
對軟體開發成本高和進度估計不準確.
用戶對已完成的"軟體系統"不滿意.
軟體產品的質量不可靠.
軟體的維護困難,維護的人員與費用不斷增加.
缺乏完整,正確的文檔資料.
軟體成本在計算機系統中所佔比例逐年上升.
軟體的發展跟不上硬體的發展和用戶的要求.
軟體的規模非常龐大,多人共同開發,必須有嚴格和科學的管理.
軟體開發過分依賴於個人的智力勞動和經驗.
學習指針最好是先學些計算機硬體工作的原理,例如:直接定址,間接定址等,只有了解了這些內容以後,你再學指針就比較容易理會,畢竟C語言是一門介於機器語言與高級語言中間的語言,沒有一些硬體工作知識是很難領悟它的真諦的.
1.指針是地址變數:它的值有兩種:其一是地址,其二是內容.不同的表達方式可以取不同的值,這有點象一個家庭地址在不同的場合標識的人物也不同.例如:父母親在他們的單位所登記的家庭地址就代表他們自己,而你在學校中登記的同樣的家庭地址就代表你自己.
2.指針是可以運算的,它的運演算法則與變數是一致的.
另外,在編寫一個程序時,除非萬不得已,一般不要使用指針變數.建議各位對於指針只要能看懂就行!
操作系統,科學計算,自然語言處理…….
C語言是一門簡潔語言
簡單:僅有32個關鍵字,9種控制語句(參見附錄2).在所有高級語言中,關鍵字最少的.
簡練:在C程序中一行代碼可以表達的內容,在別的語言中可能要用好幾行代碼
C語句: int a[10];
PASCAL:VAR a:ARRAY[1..10] OF INTEGER
生成機器碼質量高. 程序執行效率高.僅比匯編程序生成的代碼效率低10%~20%.在所有高級語言中,代碼執行效率最高的.
學習C語言的難點
C語言:
限制少,靈活性大.使程序設計人員有較大的自由度,以適應寬廣的應用面.
引出的問題:
容易出錯
技巧性強
因此,C語言雖然很簡潔,但學習起來,比Fortran, Basic等高級語言要困難.
怎樣學好C語言
多閱讀別人書寫的結構良好的程序
操作系統,科學計算,自然語言處理…….
C語言是一門簡潔語言
簡單:僅有32個關鍵字,9種控制語句(參見附錄2).在所有高級語言中,關鍵字最少的.
簡練:在C程序中一行代碼可以表達的內容,在別的語言中可能要用好幾行代碼
C語句: int a[10];
PASCAL:VAR a:ARRAY[1..10] OF INTEGER
生成機器碼質量高. 程序執行效率高.僅比匯編程序生成的代碼效率低10%~20%.在所有高級語言中,代碼執行效率最高的.
學習C語言的難點
C語言:
限制少,靈活性大.使程序設計人員有較大的自由度,以適應寬廣的應用面.
引出的問題:
容易出錯
技巧性強
因此,C語言雖然很簡潔,但學習起來,比Fortran, Basic等高級語言要困難.
怎樣學好C語言
多閱讀別人書寫的結構良好的程序
操作系統,科學計算,自然語言處理…….
C語言是一門簡潔語言
簡單:僅有32個關鍵字,9種控制語句(參見附錄2).在所有高級語言中,關鍵字最少的.
簡練:在C程序中一行代碼可以表達的內容,在別的語言中可能要用好幾行代碼
C語句: int a[10];
PASCAL:VAR a:ARRAY[1..10] OF INTEGER
生成機器碼質量高. 程序執行效率高.僅比匯編程序生成的代碼效率低10%~20%.在所有高級語言中,代碼執行效率最高的.
學習C語言的難點
C語言:
限制少,靈活性大.使程序設計人員有較大的自由度,以適應寬廣的應用面.
引出的問題:
容易出錯
技巧性強
因此,C語言雖然很簡潔,但學習起來,比Fortran, Basic等高級語言要困難.
怎樣學好C語言
多閱讀別人書寫的結構良好的程序
操作系統,科學計算,自然語言處理…….
C語言是一門簡潔語言
簡單:僅有32個關鍵字,9種控制語句(參見附錄2).在所有高級語言中,關鍵字最少的.
簡練:在C程序中一行代碼可以表達的內容,在別的語言中可能要用好幾行代碼
C語句: int a[10];
PASCAL:VAR a:ARRAY[1..10] OF INTEGER
生成機器碼質量高. 程序執行效率高.僅比匯編程序生成的代碼效率低10%~20%.在所有高級語言中,代碼執行效率最高的.
學習C語言的難點
C語言:
限制少,靈活性大.使程序設計人員有較大的自由度,以適應寬廣的應用面.
引出的問題:
容易出錯
技巧性強
因此,C語言雖然很簡潔,但學習起來,比Fortran, Basic等高級語言要困難.
怎樣學好C語言
多閱讀別人書寫的結構良好的程序
操作系統,科學計算,自然語言處理…….
C語言是一門簡潔語言
簡單:僅有32個關鍵字,9種控制語句(參見附錄2).在所有高級語言中,關鍵字最少的.
簡練:在C程序中一行代碼可以表達的內容,在別的語言中可能要用好幾行代碼
C語句: int a[10];
PASCAL:VAR a:ARRAY[1..10] OF INTEGER
生成機器碼質量高. 程序執行效率高.僅比匯編程序生成的代碼效率低10%~20%.在所有高級語言中,代碼執行效率最高的.
學習C語言的難點
C語言:
限制少,靈活性大.使程序設計人員有較大的自由度,以適應寬廣的應用面.
引出的問題:
容易出錯
技巧性強
因此,C語言雖然很簡潔,但學習起來,比Fortran, Basic等高級語言要困難.
怎樣學好C語言
多閱讀別人書寫的結構良好的程序