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.1.1MFC編程框架
3.1.2CAsyncSocket類編程模型
3.1.3CSocket類編程模型
3.1.4派生套接字類
3.2CAsyncSocket類編程實例
3.2.2創建客戶機
3.2.3客戶機代碼分析
3.2.4創建伺服器
3.2.5伺服器代碼分析
3.2.6點對點通信客戶機與伺服器聯合測試
3.3CSocket類編程實例
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.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
第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客戶機/伺服器模型
8.3.2打開適配器捕獲數據包
8.3.3捕獲和列印所有數據包
8.3.4過濾數據包
8.3.5分析數據包
習題8
第9章 網路五子棋
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.6訊息結構體設計
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.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.2創建一個窗體完整代碼31
程式2.3為窗體添加控制項完整代碼36
程式2.5阻塞模式套接字伺服器完整代碼52
程式2.7非阻塞模式套接字伺服器完整代碼56
程式2.8套接字錯誤處理完整代碼61
程式2.11伺服器回響多客戶機的並發訪問完整代碼81
程式2.12TcpClient客戶機程式完整代碼89
程式2.13select
I/O模型回送伺服器完整代碼93
程式2.14WSAEventSelect I/O模型回送伺服器完整代碼107
程式2.15用
完成連線埠開發回聲伺服器完整代碼120
程式3.2點對點通信伺服器完整代碼161
程式3.4聊天室客戶機完整代碼191
程式4.1Internet數據下載通用例程1206
程式4.2Internet數據下載通用例程2208
程式4.3獲取FTP檔案目錄並顯示通用例程210
程式4.5更改當前目錄並顯示216
程式4.6在FTP伺服器上創建新目錄217
程式4.7從FTP伺服器上刪除目錄218
程式4.8從遠程伺服器下載檔案219
程式4.9上傳檔案到FTP伺服器220
程式4.11FTP伺服器目錄或檔案的重命名222
程式4.12建立WWW連線224
程式4.13讀取Cookie227
程式4.15用InternetErrorDlg處理HTTP驗證229
程式4.16用InternetSetOption處理HTTP驗證230
程式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.3用C語言編寫字元飄移執行緒303
程式7.5用C語言編寫多執行緒同步實例2307
程式7.6笑臉程式完整代碼308
程式7.7用戶界面執行緒用於伺服器
套接字編程315
程式7.8工作執行緒的創建和調用317
程式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編程框架、阻塞/
非阻塞模式套接字編程、
異步套接字編程、Blocking
I/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網路編程案例教程》語言生動流暢,分析深入淺出,步驟精煉,圖文並茂。注重套用、強調實踐,案例編碼覆蓋主流技術和方法,能夠幫助讀者快速地學以致用。可作為各類學校的網路編程專業教材,也可作為網路編程人員的自學參考用書。
套接字摘要
套接字禁止了從應用程式直接訪問傳輸層的複雜性。在日常生活中兩個人打電話,那個電話機就可以理解為是通話的接口,只要會用電話機,甭管電話間是如何複雜連線的,通話隨時隨地可以輕鬆完成。套接字就像那個電話機,編程者只要掌握了套接字技術(類似電話機的使用方法),那么網路編程(就像打電話)工作就非常簡單了。至於套接字與下層的關係,則由作業系統來實現和封裝,因此,套接字簡化網路編程。
對多數作業系統而言,應用程式和作業系統程式是在不同的保護模式下運行的。應用程式一般不能直接訪問作業系統內部的資源,這樣可以避免應用程式非法破壞作業系統的運行。為此,作業系統需要提供應用程式編程接口(Application Programming Interface,API)給應用程式,使其能夠利用作業系統提供的服務。對於網路作業系統,需要為網路應用程式提供網路編程接口實現網路通信。目前多數作業系統提供了
套接字(Socket)接口作為網路編程接口。
Berkeley套接字(
BSD套接字)是4.2 BSD Unix作業系統(於1983發布)提供的一套應用程式編程接口,是一個用C語言寫成的網路應用程式開發庫,主要用於實現網間
進程通信。Berkeley套接字後來成為其它現代作業系統參照的事實工業標準。
Windows作業系統在後來的BSD4.3版基礎上實現了自己的Windows Socket(又稱
WinSock)套接字編程接口。