版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第一章 網(wǎng)絡(luò)編程基礎(chǔ)1. 什么是線(xiàn)程,什么是進(jìn)程?答:進(jìn)程 是處于運(yùn)行過(guò)程中的程序?qū)嵗?是操作系統(tǒng)調(diào)度和分配資源的基本單位。 一 個(gè)進(jìn)程實(shí)體由程序代碼、數(shù)據(jù)和進(jìn)程控制塊三部分構(gòu)成。 線(xiàn)程 是進(jìn)程中的一個(gè)實(shí)體,是 被系統(tǒng)獨(dú)立調(diào)度和分派的基本單位,線(xiàn)程自己不擁有系統(tǒng)資源,只擁有一點(diǎn)在運(yùn)行中必 不可少的資源,但它可與同屬一個(gè)進(jìn)程的其它線(xiàn)程共享進(jìn)程所擁有的全部資源。2. 描述網(wǎng)絡(luò)應(yīng)用程序的一般組成。為什么說(shuō)應(yīng)用層協(xié)議是在應(yīng)用程序中實(shí)現(xiàn)的?答:從功能上, 可以將網(wǎng)絡(luò)應(yīng)用程序分為兩部分, 一部分是專(zhuān)門(mén)負(fù)責(zé)網(wǎng)絡(luò)通信的模塊, 它們與網(wǎng)絡(luò)協(xié)議棧相連接,借助網(wǎng)絡(luò)協(xié)議棧提供的服務(wù)完成網(wǎng)絡(luò)上數(shù)據(jù)信息的交換。另 一部
2、分是面向用戶(hù)或者作其他處理的模塊,它們接收用戶(hù)的命令,或者對(duì)借助網(wǎng)絡(luò)傳輸 過(guò)來(lái)的數(shù)據(jù)進(jìn)行加工,這兩部分模塊相互配合,來(lái)實(shí)現(xiàn)網(wǎng)絡(luò)應(yīng)用程序的功能。2. 實(shí)現(xiàn)網(wǎng)間進(jìn)程通信必須解決哪些問(wèn)題?答:(1 )網(wǎng)間進(jìn)程的標(biāo)識(shí)問(wèn)題;(2)如何與網(wǎng)絡(luò)協(xié)議棧連接的問(wèn)題; (3)協(xié)議的識(shí)別 問(wèn)題;(4)不同的通信服務(wù)的問(wèn)題4. 說(shuō)明 TCP/IP 中,端口的概念和端口的分配機(jī)制。答:端口是 TCP/IP 協(xié)議族中,應(yīng)用層進(jìn)程與傳輸層協(xié)議實(shí)體間的通信接口。 TCP/IP 協(xié)議采用了全局分配(靜態(tài)分配)和本地分配(動(dòng)態(tài)分配)相結(jié)合的分配方法。對(duì)于TCP,或者UDP,將它們的全部65535個(gè)端口號(hào)分為保留端口號(hào)和自由端口號(hào)
3、 兩部分。保留端口的范圍是 01023 ,又稱(chēng)為眾所周知的端口或熟知端口( well-known port ),其余的端口號(hào), 1024-65535 ,稱(chēng)為自由端口號(hào),采用本地分配,又稱(chēng)為動(dòng)態(tài)分 配的方法。總之, TCP 或 UDP 端口的分配規(guī)則是:端口 0 :不使用,或者作為特殊的使用;端口 1-255 :保留給特定的服務(wù),TCP和UDP 均規(guī)定,小于 256 的端口號(hào)才能分配給網(wǎng)上著名的服務(wù);端口 256-1023 :保留給其他 的服務(wù),如路由;端口 1024-4999 :可以用作任意客戶(hù)的端口;端口 5000-65535 :可以用作用戶(hù)的服務(wù) 器端口。5. 什么是網(wǎng)絡(luò)應(yīng)用進(jìn)程的網(wǎng)絡(luò)地址
4、?說(shuō)明三元組和五元組的概念。答:應(yīng)用層進(jìn)程地址 = (傳輸層協(xié)議,主機(jī)的 IP 地址,傳輸層的端口號(hào)) ,它標(biāo)識(shí)了 因特網(wǎng)中,進(jìn)程間通信的一個(gè)端點(diǎn),也把它稱(chēng)為進(jìn)程的網(wǎng)絡(luò)地址。(傳輸層協(xié)議,主機(jī)的 IP 地址,傳輸層的端口號(hào)) ,這樣一個(gè)三元組,叫做一個(gè)半相關(guān) (half-association )。(傳輸層協(xié)議, 本地機(jī) IP 地址,本地機(jī)傳輸層端口, 遠(yuǎn)地機(jī) IP 地址, 遠(yuǎn)地機(jī)傳輸層端口 ), 五元組稱(chēng)為一個(gè)全相關(guān) (association )。即兩個(gè)協(xié)議相同的半相關(guān)才能組合成一個(gè)合適的 全相關(guān),或完全指定一對(duì)網(wǎng)間通信的進(jìn)程。6. 舉例說(shuō)明面向消息的協(xié)議與基于流動(dòng)協(xié)議有什么不同。答:例如甲
5、向乙發(fā)送三個(gè)消息,分別是: 128 、64 和32 字節(jié)。面向消息的協(xié)議中, 如果接受緩沖區(qū)是 256 字節(jié),足以接收 3 條消息, 且這三條消息 全部達(dá)到。乙仍然需要發(fā)送 3條讀取消息。分別返回 128 、64 、32 字節(jié),而不用一次讀 取來(lái)調(diào)用者單個(gè)數(shù)據(jù)包?;诹鞯南f(xié)議中,在接收端乙的堆棧把所有進(jìn)來(lái)的消息數(shù)據(jù)包聚集在一起,放入 堆棧,等待應(yīng)用進(jìn)程讀取。進(jìn)程發(fā)送讀取命令,指定了進(jìn)程接收緩沖區(qū),如果進(jìn)程緩沖 區(qū)有 256 字節(jié),系統(tǒng)馬上返回全部 224 字節(jié)。7. TCP 提供的服務(wù)有哪些特征? 答:應(yīng)用層進(jìn)程提供一個(gè)面向連接的、端到端的、完全可靠的(無(wú)差錯(cuò)、無(wú)丟失、無(wú) 重復(fù)或失序)全雙
6、工的流傳輸服務(wù)。 允許網(wǎng)絡(luò)中的兩個(gè)應(yīng)用程序建立一個(gè)虛擬的鏈接,在任何一個(gè)方向 上發(fā)送數(shù)據(jù),把數(shù)據(jù)當(dāng)作一個(gè)雙向字節(jié)流進(jìn)行交換,最后終止連接。8. 簡(jiǎn)要說(shuō)明三類(lèi)網(wǎng)絡(luò)編程。答:基于 WWW 應(yīng)用的網(wǎng)絡(luò)編程技術(shù) ,包括所見(jiàn)即所得的網(wǎng)頁(yè)制作工具,和動(dòng)態(tài)服務(wù) 器頁(yè)面的制作技術(shù)。 NET平臺(tái)有四組產(chǎn)品開(kāi)發(fā)工具專(zhuān)用服務(wù)器 Web服務(wù)。設(shè)備。MS.NET 順應(yīng)了軟件工業(yè)的趨勢(shì),包括4個(gè)方面: 分布式計(jì)算 組件化 企業(yè)級(jí)別的服務(wù) WEB范型轉(zhuǎn)移。.NET平臺(tái)由三層軟件構(gòu)成 頂層是全新的開(kāi)發(fā)工具 VS.NET, 中間 層包括三部分:.NET服務(wù)器、.NET服務(wù)構(gòu)件和.NET框架。 底層是WINDOWS操作 系統(tǒng)。
7、Web 服務(wù)是松散耦合的可復(fù)用的軟件模塊,在 Internet 上發(fā)布后,能通過(guò)標(biāo)準(zhǔn)的 Internet 協(xié)議在程序中訪問(wèn),具有以下的特點(diǎn): (1)可復(fù)用(2)松散耦合( 3)封裝了 離散(4) Web服務(wù)可以在程序中訪問(wèn)(5)Web服務(wù)在In ter net上發(fā)布 9說(shuō)明 C/S 模式的概念、工作過(guò)程和特點(diǎn)。答: C/S 模式即客戶(hù)機(jī) /服務(wù)器模式,是應(yīng)用程序最常用的通信模式。服務(wù)器的工作過(guò)程是 :(1)打開(kāi)一通信通道,并告知服務(wù)器所在的主機(jī),它愿意在某一 公認(rèn)的地址上接收客戶(hù)請(qǐng)求。 (2)等待客戶(hù)的請(qǐng)求到達(dá)該端口。 ( 3)服務(wù)器接收到服務(wù) 請(qǐng)求,處理該請(qǐng)求并發(fā)送應(yīng)答信號(hào)。為了能并發(fā)地接收
8、多個(gè)客戶(hù)的服務(wù)請(qǐng)求,要激活一 個(gè)新進(jìn)程或新線(xiàn)程來(lái)處理這個(gè)客戶(hù)請(qǐng)求(如 UNIX系統(tǒng)中用fork、exec )。服務(wù)完成后, 關(guān)閉此新進(jìn)程與客戶(hù)的通信鏈路,并終止。 (4 )返回第二步,等待并處理另一客戶(hù)請(qǐng)求。(5)在特定的情況下,關(guān)閉服務(wù)器??蛻?hù)方工作過(guò)程 :(1)打開(kāi)一通信通道,并連接到服務(wù)器所在主機(jī)的特定監(jiān)聽(tīng)端口。 (2)向服務(wù)器發(fā)送請(qǐng) 求報(bào)文,等待并接收應(yīng)答;繼續(xù)提出請(qǐng)求,與服務(wù)器的會(huì)話(huà)按照應(yīng)用協(xié)議進(jìn)行。(3)請(qǐng)求結(jié)束后,關(guān)閉通信通道并終止。特點(diǎn):( 1)客戶(hù)和服務(wù)器都是軟件進(jìn)程, C/S 模式是網(wǎng)絡(luò)上通過(guò)進(jìn)程通信建立分布式應(yīng) 用的常用模型。(2)非對(duì)稱(chēng)性:服務(wù)器通過(guò)網(wǎng)絡(luò)提供服務(wù),客戶(hù)通
9、過(guò)網(wǎng)絡(luò)使用服務(wù),這種不對(duì)稱(chēng)性體現(xiàn) 在軟件結(jié)構(gòu)和工作過(guò)程上。 ( 3)對(duì)等性:客戶(hù)和服務(wù)器必有一套共識(shí)的約定,必與以某 種應(yīng)用層協(xié)議相聯(lián),并且協(xié)議必須在通信的兩端實(shí)現(xiàn)。 (4 )服務(wù)器的被動(dòng)性:服務(wù)器必 須先行啟動(dòng),時(shí)刻監(jiān)聽(tīng),及時(shí)服務(wù),只要有客戶(hù)請(qǐng)求,就立即處理并響應(yīng),回傳信息。 但決不主動(dòng)提供服務(wù)。 (5 )客戶(hù)機(jī)的主動(dòng)性:客戶(hù)機(jī)可以隨時(shí)提出請(qǐng)求,通過(guò)網(wǎng)絡(luò)得到 服務(wù),也可以關(guān)機(jī)走人,一次請(qǐng)求與服務(wù)的過(guò)程是由客戶(hù)機(jī)首先激發(fā)的。(6)一對(duì)多:一個(gè)服務(wù)器可以為多個(gè)客戶(hù)機(jī)服務(wù),客戶(hù)機(jī)也可以打開(kāi)多個(gè)窗口,連接多 個(gè)服務(wù)器。(7)分布性與共享性:資源在服務(wù)器端組織與存儲(chǔ),通過(guò)網(wǎng)絡(luò)分散在多個(gè)客戶(hù)端使用。 1
10、0.說(shuō)明用戶(hù)和客戶(hù)機(jī),服務(wù)器和服務(wù)器類(lèi)計(jì)算機(jī)的區(qū)別。答:“客戶(hù)” (client) 和服務(wù)器都指的是應(yīng)用進(jìn)程,即計(jì)算機(jī)軟件?!坝脩?hù)” (user) 指的是使用計(jì)算機(jī)的人。服務(wù)器( server )這個(gè)術(shù)語(yǔ)來(lái)指那些運(yùn)行著的服務(wù)程序。服務(wù)器類(lèi)計(jì)算機(jī)( server-class computer )這一術(shù)語(yǔ)來(lái)稱(chēng)呼那些運(yùn)行服務(wù)器軟件的強(qiáng)大 的計(jì)算機(jī)。第二章 UNIX 套接字編程接口2. 實(shí)現(xiàn)套接字編程接口的兩種方式是什么? 答:一種是在操作系統(tǒng)的內(nèi)核中增加相應(yīng)的軟件來(lái)實(shí)現(xiàn),一種是通過(guò)開(kāi)發(fā)操作系統(tǒng)之外 的函數(shù)庫(kù)來(lái)實(shí)現(xiàn)。4. 什么是套接字?答:是應(yīng)用程序通過(guò)網(wǎng)絡(luò)協(xié)議棧進(jìn)行通信交互的接口。5. 說(shuō)明套接字特
11、點(diǎn)。 答:(1)通信域。套接字通常只和同一域中的套接字交換數(shù)據(jù)。如果數(shù)據(jù)交換要穿越 域的邊界,就一定要執(zhí)行某種解釋程序。 ( 2)套接字有三種類(lèi)型,流式、數(shù)據(jù)包和原始(4)使用確定的IP地址套接字。(3)套接字由應(yīng)用層創(chuàng)建,并為其服務(wù),而后被釋放 和傳輸層端口號(hào)6. 說(shuō)明套接字應(yīng)用場(chǎng)合。答:(1)不管是采用對(duì)等模式或者客戶(hù)機(jī)/服務(wù)器模式,通信雙方的應(yīng)用程序都需要 開(kāi)發(fā)。(2)雙方所交換數(shù)據(jù)的結(jié)構(gòu)和交換數(shù)據(jù)的順序有特定的要求,不符合現(xiàn)在成熟的 應(yīng)用層協(xié)議,甚至需要自己去開(kāi)發(fā)應(yīng)用層協(xié)議,自己設(shè)計(jì)最適合的數(shù)據(jù)結(jié)構(gòu)和信息交換 規(guī)程。7. 說(shuō)明本機(jī)字節(jié)順序和網(wǎng)絡(luò)字節(jié)順序的概念。答:在具體計(jì)算機(jī)中的多字節(jié)
12、數(shù)據(jù)的存儲(chǔ)順序,稱(chēng)為本機(jī)字節(jié)順序。多字節(jié)數(shù)據(jù)在網(wǎng) 絡(luò)協(xié)議報(bào)頭中的存儲(chǔ)順序,稱(chēng)為網(wǎng)絡(luò)字節(jié)順序。8流式套接口的工作過(guò)程f驀有己翱精齡戢, 9. 什么是阻塞問(wèn)題?如何對(duì)應(yīng)?答:阻塞是指一個(gè)進(jìn)程執(zhí)行了一個(gè)函數(shù)或者系統(tǒng)調(diào)用,該函數(shù)由于某種原因不能立即完成,因而不能返回調(diào)用它的進(jìn)程,導(dǎo)致進(jìn)程受控于這個(gè)函數(shù)而處于等待的狀態(tài),進(jìn)程的 這種狀態(tài)稱(chēng)為阻塞。利用UNIX操作系統(tǒng)的FORK()系統(tǒng)調(diào)用,編制多進(jìn)程并發(fā)執(zhí)行的服 務(wù)器程序。第三章 Win dows 環(huán)境的網(wǎng)絡(luò)編程1. 試述 WinSock 1.1 的特點(diǎn)。答:(1) WinSock 1.1 全面繼承了 Berkeley Sockets 規(guī)范(2) 數(shù)據(jù)庫(kù)
13、函數(shù)。其中六個(gè)采用 getXbyY() 的形式,大多要借助網(wǎng)絡(luò)上的數(shù)據(jù)庫(kù)來(lái)獲得 信息,(3) WinSock 1.1 擴(kuò)充了 Berkeley Sockets 規(guī)范(4) WinSock 1.1 只支持 TCP/IP 協(xié)議棧2. WinSock 規(guī)范與 Berkeley 套接口的區(qū)別是什么?答:a.套接口數(shù)據(jù)類(lèi)型和該類(lèi)型的錯(cuò)誤返回值b. select() 函數(shù)和 FD_* 宏。在 Winsock 中,使用 select() 函數(shù)時(shí),應(yīng)用程序應(yīng)堅(jiān)持用 FD_XXX 宏來(lái)設(shè)置,初始化,清除和檢查 fd_set 結(jié)構(gòu)。c. 錯(cuò)誤代碼的獲得 在 Winsock 中,錯(cuò)誤代碼可以使用 WSAGetLas
14、tError() 調(diào)用得到。d. 指針?biāo)袘?yīng)用程序與Windows Sockets 使用的指針都必須是FAR指針。e. 重命名的函數(shù)。(1)close()改變?yōu)?closesocket() (2)ioctl()改變?yōu)?ioctlsocket()f. Winsock 支持的最大套接口數(shù)目 在 WINSOCK.H 中缺省值是 64 ,在編譯時(shí)由常量 FD_SETSIZE 決定。g. 頭文件 Berkeley 頭文件被包含在 WINSOCK.H 中。一個(gè) Windows Sockets 應(yīng)用程 序只需簡(jiǎn)單地包含 WINSOCK.H 就足夠了。 h. Winsock 規(guī)范對(duì)于原始套接口的支 持.i.W
15、i nsock規(guī)范對(duì)于原始套接口和消息驅(qū)動(dòng)機(jī)制的支持。體現(xiàn)在異步選擇機(jī)制、異步 請(qǐng)求函數(shù)、阻塞處理方法、錯(cuò)誤處理、啟動(dòng)和終止等方面。3. WinSock 的注冊(cè)和注銷(xiāo)過(guò)程答 : 注 冊(cè) 過(guò) 程 : 調(diào) 用 WSAStartup 的 格 式 : int WSAStartup( WORD wVersionRequested, LPWSADATA lpWSAData ); wVersionRequested:指定要使用的 WinSock 的最高版本號(hào), lpWSAData 用來(lái)返回 WinSockAPI 實(shí)現(xiàn)細(xì)節(jié)的 WSAData 結(jié)構(gòu)變量指針。注銷(xiāo)過(guò)程:應(yīng)用程序必須調(diào)用 WSACleanup()
16、函數(shù),來(lái)解除與 Winsock.DLL 庫(kù)的綁定, 釋放 Winsock 實(shí)現(xiàn)分配給應(yīng)用程序的系統(tǒng)資源, 中止對(duì) Windows Sockets DLL 的使用。 int WSACleanup ( void );4. 說(shuō)明 WSAStartup 函數(shù)初始化過(guò)程。(1 )查找 WinSock.DLL 文件,如果有 WinSock 實(shí)現(xiàn),則調(diào)入相關(guān)信息。若無(wú),則初 始化失敗。返回錯(cuò)誤信息。 ( 2)。確認(rèn)版本號(hào)。(3)建立 WinSock 同應(yīng)用程序的聯(lián)系。(4)函數(shù)創(chuàng)建成功,在WSAData結(jié)構(gòu)中返回許多信息,否則,通知用戶(hù)“初始化失敗”。5. 畫(huà)框圖說(shuō)明同步套接字的 send 函數(shù)的初始化過(guò)程
17、。if枚止左ill謁用 Send (S-, t> jf , I h, Qdi SOCKETJKb.l*J-ES! jii'5Y5B0p 中-彳扶汀畝陀在巧eii(沖Rbu屮 ff 7i第四章1. 為什么說(shuō)MFC是一個(gè)編程框架?它提供了哪些相應(yīng)的工具?MFC 應(yīng)用程序框架,簡(jiǎn)稱(chēng)MFC 框架,是由 MFC(Microsoft Foundation ClassLibrary )中的各種類(lèi)結(jié)合起來(lái)構(gòu)成的。MFC框架從總體上定義了應(yīng)用程序的輪廓,并提 供了用戶(hù)接口的標(biāo)準(zhǔn)實(shí)現(xiàn)方法,程序員只須通過(guò)預(yù)定義的接口把具體應(yīng)用程序特有的東 西填入這個(gè)輪廓,就能建立Windows下的應(yīng)用程序。Micro
18、soft Visual C+提供了相應(yīng)的工具來(lái)完成這個(gè)工作:用應(yīng)用程序向?qū)?(AppWizard )可以生成應(yīng)用程序的骨架文件(代碼和資源等);用資源編輯器可以直觀 地設(shè)計(jì)用戶(hù)接口;用類(lèi)向?qū)В–lassWizard )可以將代碼添加到骨架文件;用編譯器可以 通過(guò)類(lèi)庫(kù)實(shí)現(xiàn)應(yīng)用程序特定的邏輯。MFC實(shí)現(xiàn)了對(duì)應(yīng)用程序概念的封裝,把類(lèi)、類(lèi)的繼承、動(dòng)態(tài)約束、類(lèi)的關(guān)系和相互作用等封裝起來(lái)。2. MFC類(lèi)庫(kù)封裝了哪些內(nèi)容?1)對(duì)Win32應(yīng)用程序編程接口的封裝2)對(duì)應(yīng)用程序概念的封裝3)對(duì)COM/OLE特性的封裝4)對(duì)ODBC功能的封裝3. 典型的MDI應(yīng)用程序AppWizard 會(huì)自動(dòng)創(chuàng)建一系列文件,如果
19、工程的名字是My,這些文件的名字是什么?頭文件My.h,實(shí)現(xiàn)文件My.cpp,資源文件My.rc和模塊定義文件My.def4. 說(shuō)明構(gòu)成應(yīng)用程序的對(duì)象之間的關(guān)系。這里,用圖的形式可直觀地表示所涉及的MFC類(lèi)的繼承或者派生關(guān)系,如圖4.2所示Cob jectCCmdTarietCW i nThr e iodl D oc. Tennpa t aCD0cua<«n I 1CVnd,一CWl nApp>CFf|£Vi“ CCantro 1 r1 1JZCSi rixl gOocTcfflisiat c|CMD IF r|C>kl tiDgTwp“ 口hi"
20、;而|CStt”Ba£圖4.2 構(gòu)成MDI應(yīng)用程序的各對(duì)象之間的派生關(guān)系5.說(shuō)明MFC對(duì)象和 Windows 對(duì)象的關(guān)系。所謂Windows對(duì)象是Win32下用句柄表示的Windows操作系統(tǒng)對(duì)象;所謂MFC對(duì) 象是C+對(duì)象,是一個(gè)C+類(lèi)的實(shí)例。兩者有很大的區(qū)別,但聯(lián)系緊密。以窗口對(duì)象為例:密口旬旃 tfindOwSfif 口對(duì)象Cllnd類(lèi)是對(duì)于*i ndows的窗口對(duì)氟的對(duì)裝CNnd 類(lèi)圖4.3 MFC的CWnd類(lèi)窗口對(duì)象和 Windows 的窗口對(duì)象的關(guān)系6. 說(shuō)明MFC對(duì)象和 Windows 對(duì)象的區(qū)別。(1)對(duì)應(yīng)的數(shù)據(jù)結(jié)構(gòu)不同(2 )所處的層次不同(3 )創(chuàng)建的機(jī)制不同(4
21、)二者轉(zhuǎn)換的方式不同(5 )使用的范圍不同(6 )銷(xiāo)毀的方法不同7. CObject類(lèi)具有哪些特性?CObject類(lèi)有很多有用的特性:對(duì)運(yùn)行時(shí)類(lèi)信息的支持,對(duì)動(dòng)態(tài)創(chuàng)建的支持,對(duì)串行化 的支持,對(duì)象診斷輸出,等等。8. 說(shuō)明應(yīng)用程序、文檔模板、邊框窗口、視圖和文檔等的創(chuàng)建關(guān)系。P121答:應(yīng)用程序是全局對(duì)象,在啟動(dòng)程序之前構(gòu)造;應(yīng)用程序創(chuàng)建文檔模板;文檔模板創(chuàng) 建文檔和邊框窗口;邊框窗口創(chuàng)建試圖。9. 說(shuō)明WinMain 入口函數(shù)的流程。P12310. 消息循環(huán)的過(guò)程是什么? P12411. 應(yīng)用程序的退出過(guò)程是什么?F面以單擊主窗口的關(guān)閉按鈕為例,來(lái)說(shuō)明應(yīng)用程序退出的過(guò)程1) 用戶(hù)單擊主窗口的
22、關(guān)閉按鈕,導(dǎo)致發(fā)送MFC標(biāo)準(zhǔn)命令消息ID_APP_EXIT。MFC調(diào)用CwinApp : OnAppExit()來(lái)完成對(duì)該命令消息的缺省處理,主要是向主窗口發(fā)送WM_CLOSE消息。2) 主窗口處理 WM_CLOSE消息。3) 收到WM_QUIT消息后,退出消息循環(huán),進(jìn)而退出整個(gè)應(yīng)用程序。 第五章一、MFC提供的兩個(gè)套接字類(lèi)是什么?答:CAsyncSocket 類(lèi),CSocket 類(lèi)。二、為什么說(shuō)CAsyncSocket 類(lèi)是在很低的層次上對(duì) Windows Sockets API進(jìn)行了圭寸裝?答:它的成員函數(shù)和 Windows Sockets API 的函數(shù)調(diào)用直接對(duì)應(yīng)。一個(gè)CAsyncSo
23、cket 對(duì)象代表了一個(gè) Windows套接字。它是網(wǎng)絡(luò)通信的端點(diǎn)。除了把套接字封裝成C+的面向?qū)ο蟮男问焦┏绦騿T使用以外,這個(gè)類(lèi)唯一所增加的抽象就是將那些與套接字相關(guān) 的Windows消息變?yōu)镃AsyncSocket類(lèi)的回調(diào)函數(shù)。三、 為什么說(shuō) Csocket類(lèi)是對(duì)Windows Sockets API的高級(jí)圭寸裝?答:CSocket類(lèi)繼承了 CAsyncSocket類(lèi)的許多成員函數(shù),用法一致。CSocket類(lèi)的高級(jí)表現(xiàn)在三個(gè)方面:(1) CSocket結(jié)合archive類(lèi)來(lái)使用套接字。(2) CSocket管理了通信的許多方面,如字節(jié)順序問(wèn)題和字符串轉(zhuǎn)換問(wèn)題。(3) CSocket類(lèi)為Wi
24、ndows消息的后臺(tái)處理提供了阻塞的工作模式。四、使用CAsyncSocket類(lèi)的一般步驟是什么?序號(hào)服務(wù)器(Server )客戶(hù)機(jī)(Client )1/構(gòu)建一個(gè)套接字CAsyn cSocket sockSrvr;/構(gòu)建一個(gè)套接字CAsyn cSocket sockClie nt;2/創(chuàng)建SOCKET句柄,綁定到指 定的端口sockSrvr.Create (n Port);/創(chuàng)建SOCKET句柄,使用默認(rèn)參數(shù) sockClie nt.Create();3/啟動(dòng)監(jiān)聽(tīng),時(shí)刻準(zhǔn)備接受連接 請(qǐng)求sockSrvr.Liste n();4/請(qǐng)求連接到服務(wù)器sockClie nt.C onn ect(str
25、Addr, nport);5/構(gòu)造 個(gè)新的空的套接字Casyn cSocket sockRecv;/接收連接sockSrvr.Accept(sockRecv);6/接收數(shù)據(jù)sockSrvr.Receive(pBuf, nLen);/發(fā)送數(shù)據(jù)sockClie nt.Se nd(pBuf, nLen);7/發(fā)送數(shù)據(jù)sockSrvr.Se nd(pBuf, nLen);/接收數(shù)據(jù)sockClie nt.Receive(pBuf, nLen);8/關(guān)閉套接字對(duì)象 sockSrvr.Close();/關(guān)閉套接字對(duì)象sockClie nt.Close();五、CAsyncSocket類(lèi)可以接受并處理哪些消
26、息事件?當(dāng)這些網(wǎng)絡(luò)事件發(fā)生時(shí),MFC框架作何處理?答:MFC套接字對(duì)象可以接受并處理的六種網(wǎng)絡(luò)事件:(1)FD_READ事件通知:通知有數(shù)據(jù)可讀。(2)FD_WRITE事件通知:通知可以寫(xiě)數(shù)據(jù)。(3)FD_ACCEPT事件通知:通知監(jiān)聽(tīng)套接字有連接請(qǐng)求可以接受。(4)FD_CONNECT事件通知:通知請(qǐng)求連接的套接字,連接的要求已被處理。(5)FD_CLOSE事件通知:通知套接字已關(guān)閉。(6)FD_OOB事件通知:通知將有帶外數(shù)據(jù)到達(dá)處理:按照Windows的消息驅(qū)動(dòng)機(jī)制,MFC框架應(yīng)當(dāng)把消息發(fā)送給相應(yīng)的套接字對(duì)象, 并調(diào)用作為該對(duì)象成員函數(shù)的事件處理函數(shù)。事件與處理函數(shù)是一一映射的。在afx
27、Sock.h文件中的CAsyncSocket類(lèi)的聲明中,定義了與這六個(gè)網(wǎng)絡(luò)事件對(duì)應(yīng)的事 件處理函數(shù)。virtual void On Receive(i nt n ErrorCode);對(duì)應(yīng)FD_READ 事件virtual void OnSen d(i nt n ErrorCode);對(duì)應(yīng)FD_WRITE 事件virtual void On Accept( int n ErrorCode);對(duì)應(yīng)FD_ACCEPT 事件virtual void OnConn ect(i nt n ErrorCode);對(duì)應(yīng)FD_CONNECT 事件virtual void On Close(i nt n Err
28、orCode);對(duì)應(yīng)FD_CLOSE 事件virtual void OnOutOfBandData(int nErrorCode);對(duì)應(yīng)FD_OOB事件六、CSocket類(lèi)如何通過(guò)Carchive對(duì)象來(lái)進(jìn)行數(shù)據(jù)傳輸?答:使用 CArchive 對(duì)象和套接字一起進(jìn)行數(shù)據(jù)傳輸工作,必須使用流式套接字七、說(shuō)明 CSocket 類(lèi)的編程模型。答:下面給出針對(duì)流式套接字的 CSocket 類(lèi)的編程模型1服務(wù)器端(1) CSocket sockServ; / 創(chuàng)建空的服務(wù)器端監(jiān)聽(tīng)套接字對(duì)象。/ 用眾所周知的端口,創(chuàng)建監(jiān)聽(tīng)套接字對(duì)象的底層套接字句柄。(3) sockServ.Listen();(4) CSo
29、cket sockRecv; sockServ.Accept( sockRecv); 套接字對(duì)象。2) sockServ.Create( nPort );/ 啟動(dòng)對(duì)于客戶(hù)端連接請(qǐng)求的監(jiān)聽(tīng)。/ 創(chuàng)建空的服務(wù)器端連接套接字對(duì)象。/ 接收客戶(hù)端的連接請(qǐng)求,并將其他的任務(wù)轉(zhuǎn)交給連接5) CSockFile* file ;file = new CSockFile( &sockRecv);/ 創(chuàng)建文件對(duì)象并關(guān)聯(lián)到連接套接字對(duì)象 (6) CArchive* arIn, arOut;arIn = CArchive(&file, CArchive:load);/ 創(chuàng)建用于輸入的歸檔對(duì)象,arOu
30、t = CArchive( &file, CArchive:store); /創(chuàng)建用于輸出的歸檔對(duì)象。/ 歸檔對(duì)象必須關(guān)聯(lián)到文件對(duì)象。(7) arIn >> dwValue;/ 進(jìn)行數(shù)據(jù)輸入。adOut << dwValue; / 進(jìn)行數(shù)據(jù)輸出。輸入或輸出可以反復(fù)進(jìn)行。(8) sockRecv.Close();sockServ.Close(); / 傳輸完畢,關(guān)閉套接字對(duì)象。2客戶(hù)端(1) CSocket sockClient;/ 創(chuàng)建空的客戶(hù)機(jī)端套接字對(duì)象。(2) sockClient.Create( );/ 創(chuàng)建套接字對(duì)象的底層套接字。(3) sockCli
31、ent.Connect( strAddr, nPort ); /請(qǐng)求連接到服務(wù)器。(4) CSockFile* file ;file = new CSockFile( &sockClent);/ 創(chuàng)建文件對(duì)象 ,并關(guān)聯(lián)到套接字對(duì)象(5) CArchive* arIn, arOut;arIn = CArchive(&file, CArchive:load);/ 創(chuàng)建用于輸入的歸檔對(duì)象,arOut = CArchive( &file, CArchive:store); /創(chuàng)建用于輸出的歸檔對(duì)象。/ 歸檔對(duì)象必須關(guān)聯(lián)到文件對(duì)象。(6) arIn >> dwValu
32、e;/ 進(jìn)行數(shù)據(jù)輸入。adOut << dwValue; / 進(jìn)行數(shù)據(jù)輸出。輸入或輸出可以反復(fù)進(jìn)行。(7)sockClient.Close();/ 傳輸完畢,關(guān)閉套接字對(duì)象。八、說(shuō)明使用 MFCAppWizard 創(chuàng)建客戶(hù)機(jī)端應(yīng)用程序框架具體的步驟? 答:1使用 MFC AppWizard 創(chuàng)建客戶(hù)端應(yīng)用程序框架。 創(chuàng)建的程序是一個(gè)基于對(duì)話(huà)框的 Win32 應(yīng)用程序,將自動(dòng)創(chuàng)建兩個(gè)類(lèi),應(yīng)用程序類(lèi) CTalkcApp ,對(duì)應(yīng)的文件是 talkc.h 和 talkc.cpp ;對(duì)話(huà)框類(lèi) CTalkcDlg ,對(duì)應(yīng)的文件是 talkcDlg.h 和 talkcDlg.cpp 。支 持 W
33、indows Socket ,使用 共享 的 DLL 實(shí) 現(xiàn) MFC42.DLL 。2為對(duì)話(huà)框界面添加控件對(duì)象 利用控件面板在程序的主對(duì)話(huà)框界面中添加相應(yīng)的可視控件對(duì)象,然后修改控件的屬性 3為對(duì)話(huà)框中的控件對(duì)象定義相應(yīng)的成員變量 4創(chuàng)建從 CAsyncSocket 類(lèi)繼承的派生類(lèi)(1)選擇菜單“插入 /新建類(lèi)”,進(jìn)入“ New Class ”對(duì)話(huà),選擇或輸入以下信息: Class Type :選擇 MFC ClassClass Infoumation 下的 Name: 輸入 CMySocketClass Infoumation 下的 Base class :選擇 CAsyncSocket點(diǎn)擊
34、“ OK ”按鈕,系統(tǒng)會(huì)自動(dòng)生成 CMySocket 類(lèi)對(duì)應(yīng)的包含文件 MySocket.h 和 MySocket.cpp 文件,在 VC 界面的 Class View 中就可以看到這個(gè)類(lèi)。(2)利用類(lèi)向?qū)?ClassWizard 為這個(gè)套接字類(lèi)添加響應(yīng)消息的事件處理成員函數(shù), 此程 序中需要添加 OnConnect , OnClose 和 OnReceive 三個(gè)函數(shù)。(3)為套接字類(lèi) CMySocket 類(lèi)添加一般的成員函數(shù)和成員變量。對(duì)這個(gè)套接字類(lèi),添 加一個(gè)私有的成員變量,是一個(gè)對(duì)話(huà)框類(lèi)的指針。 private:CTalkcDlg * m_pDlg; 再 添加一個(gè)成員函數(shù): void
35、SetParent(CTalkcDlg * pDlg);(4)手工添加其他代碼對(duì)于 MySocket.h ,應(yīng)在文件開(kāi)頭,添加對(duì)于此應(yīng)用程序?qū)υ?huà)框類(lèi)的聲明: class CTalkcDlg;對(duì)于 MySocket.cpp ,有四處添加: 應(yīng)在文件開(kāi)頭,添加包含文件說(shuō)明。這是因?yàn)榇颂捉幼诸?lèi)用到了對(duì)話(huà)框類(lèi)的變量。#include “ TalkcDlg.h ” 在構(gòu)造函數(shù)中,添加對(duì)于對(duì)話(huà)框指針成員變量的初始化代碼:CMySocket :CMySocket() m_pDlg = NULL; 在析構(gòu)函數(shù)中,添加對(duì)于對(duì)話(huà)框指針成員變量的初始化代碼:CMySocket :CMySocket() m_pDlg
36、 = NULL; 為成員函數(shù) setParent 和事件處理函數(shù) OnConnect ,OnClose 和 OnReceive 添加代 碼。5為對(duì)話(huà)框類(lèi)添加控件對(duì)象事件的響應(yīng)函數(shù)6為 CTalkcDlg 對(duì)話(huà)框類(lèi)添加其它的成員函數(shù)和成員變量 成員變量: CMySocket m_sConnectSocket; / 用來(lái)與服務(wù)器端連接的套接字。 成員函數(shù): void OnClose(); void OnConnect(); void OnReceive(); 7手工添加的代碼在 CTalkcDlg 對(duì)話(huà)框類(lèi)的 talkcDlg.h 中添加對(duì)于 MySocket.h 的包含命令,來(lái)獲得對(duì)于 套接字支
37、持: #include “ MySocket.h ”在 CTalkcDlg 對(duì)話(huà)框類(lèi)的 talkcDlg.cpp 中添加對(duì)于控件變量的初始化代碼:/ TODO: Add extra initialization here/ 用戶(hù)添加的控件變量的初始化代碼BOOL CTalkcDlg:OnInitDialog()m_strServName="localhost" / 服務(wù)器名 = localhost m_nServPort=1000; / 服務(wù)端口 = 1000 UpdateData(FALSE); / 更新用戶(hù)界面/ 設(shè)置套接字類(lèi)的對(duì)話(huà)框指針成員變量 m_sConnectS
38、ocket.SetParent(this); 8添加事件函數(shù)和成員函數(shù)的代碼 主要在 CTalkcDlg 對(duì)話(huà)框類(lèi)的 talkcDlg.cpp 中和 CMySocket 類(lèi)的 Mysocket.cpp 中, 添加用戶(hù)自己的事件函數(shù)和成員函數(shù)的代碼。9進(jìn)行測(cè)試。九、說(shuō)明點(diǎn)對(duì)點(diǎn)交談的客戶(hù)機(jī)端程序的類(lèi)與消息驅(qū)動(dòng)關(guān)系? 答: 下圖說(shuō)明了點(diǎn)對(duì)點(diǎn)交談的客戶(hù)端程序的類(lèi)與消息驅(qū)動(dòng)關(guān)系用單 11« I4ff th對(duì)話(huà)框時(shí)件魅璨圍鑑 OnBu11onCannect ()一曲肛員由戲nCunre 匚 It () 4 n R e c e 8 u t C :斗-Nft豐理函雄On Conn ect i )*I
39、 FD.fitrtMCtHI B '-M -V W,-M >ig簞舀i麗撫戶(hù)1| Fb.CRset1-pQnButtonGIoiq()Dn«C d s# (,斗 * 豈On Cl 處申+ r豐11*対誕抵咗骨視應(yīng)畸if靈變里問(wèn)逗掙挖件*."詫推"蒞鈕 fl.btnCflnnflCl 爰送列昱恆E I*川表畀 n H"民務(wù)爲(wèi)呂丸本折” 4trSar -立本單 « strS«rvPort”稍鴉“丈之帶M A$«rvW«£S*tPii-enI 0SW7SI注汀gut 黃搔爭(zhēng)事杵科勾m i£
40、;«nn«atSeek第六章1.說(shuō)明了各種HINTERNET句柄形成的樹(shù)形體系答:答:從函數(shù)的返回值來(lái)說(shuō),Winlnet API主要有兩種類(lèi)型。一種函數(shù)的返回值類(lèi)型是應(yīng)用程序可以根據(jù)函數(shù)執(zhí)行后的HINTERNET句柄型,一種函數(shù)的返回值類(lèi)型是布爾型。返回值來(lái)判斷函數(shù)的執(zhí)行是否成功。對(duì)于前一種函數(shù),當(dāng)函數(shù)執(zhí)行成功時(shí),會(huì)返回一個(gè)有效的句柄;當(dāng)函數(shù)失敗時(shí),貝S返回NULL。對(duì)于后一種函數(shù),當(dāng)函數(shù)執(zhí)行成功時(shí),返回TRUE;當(dāng)函數(shù)失敗時(shí),返回FALSE在函數(shù)調(diào)用失敗后,用戶(hù)往往需要了解出錯(cuò)的具體原因,應(yīng)用程序可以隨即調(diào)用 GetLastError函數(shù)來(lái)獲取更具體的錯(cuò)誤信息。3、說(shuō)明使
41、用 Winlnet API 編制FTP客戶(hù)機(jī)端應(yīng)用程序的一般步驟答:(1)調(diào)用In ternetAttemptCo nn ect函數(shù)測(cè)試主機(jī)與In ter net的連接狀態(tài),(2) 調(diào)用InternetOpen 函數(shù),創(chuàng)建HINTERNET會(huì)話(huà)根句柄。(3) 創(chuàng)建FTP會(huì)話(huà)句柄4、MFC Winlnet 所包含的類(lèi)有哪些?答:1、ClnternetSession 類(lèi),2 .連接類(lèi),包括 ClnternetConnection類(lèi)和它的派生類(lèi)CFtpConnection 類(lèi)、CHttpConnection 類(lèi)、和 CGopherConnection 類(lèi);3 文件類(lèi), 首先包括 ClnternetF
42、ile 類(lèi)和由它派生的 CHttpFile 類(lèi)和 CGopherFile 類(lèi),另外,由 CFileFind類(lèi)派生的用于文件查找的 CFtpFileFind類(lèi)和CGopherFileFind 類(lèi)也應(yīng)歸入文 件類(lèi)的層次。4. ClnternetException 類(lèi)5、MFC Winlnet各種類(lèi)之間的關(guān)系答:如下圖,其中細(xì)線(xiàn)箭頭從基類(lèi)指向繼承類(lèi),表示了類(lèi)的派生關(guān)系;粗線(xiàn)箭頭從函數(shù) 指向它所創(chuàng)建的類(lèi)對(duì)象亡I nt e irn 毗 fon 什亡 t: h on; 0 pen URL-:TGetFtpConmectiori 卡! iGetlSopherConnectlo-:GetHttpConnect
43、iori *C£Kil°Fili£ |+ 口nlerneTFii*.CHttp-CcmneCtiOnl-¥ Opcnflcquest fZHttpFHe'T*.:OpenFi'(i ICGopiujrFIlO*CFiieF nd匚 FtpFiiMFCGopherFileFind6、使用Winlnet類(lèi)編程的一般步驟是什么?答:1)創(chuàng)建CI nternetSessio n 類(lèi)對(duì)象,創(chuàng)建并初始化In ternet會(huì)話(huà)。(2) 利用CInternetSession類(lèi)的QueryOption或SetOption 成員函數(shù),可以查詢(xún)或設(shè)置該類(lèi)內(nèi)含的
44、In ternet請(qǐng)求選項(xiàng),這一步是可選。(3 )創(chuàng)建連接類(lèi)對(duì)象,建立 CIn ternetSession對(duì)象與網(wǎng)絡(luò)服務(wù)器的連接,也就是應(yīng)用程序與網(wǎng)絡(luò)服務(wù)器的連接。(4) 創(chuàng)建文件檢索類(lèi)對(duì)象,對(duì)服務(wù)器進(jìn)行檢索(5) 如果需要使用異步操作模式,可以重載 CInternetSession 類(lèi)的OnStatusCallback 函數(shù),并啟動(dòng)應(yīng)用程序使用狀態(tài)回調(diào)機(jī)制。重載相關(guān)函數(shù),加入自己的代碼。(6) 如果還想更緊密地控制對(duì)于服務(wù)器文件的訪問(wèn),可以進(jìn)一步創(chuàng)建文件類(lèi)對(duì)象實(shí)例, 完成文件查找或文件讀寫(xiě)操作。(7) 創(chuàng)建CInternetException類(lèi)對(duì)象實(shí)例,處理錯(cuò)誤。(8) 關(guān)閉各種類(lèi),將資源釋
45、放給系統(tǒng)。第七章1、Win Sock的兩種I/O模式是什么?各有什么優(yōu)缺點(diǎn),缺點(diǎn)如何解決 ?答:Win Sock的兩種I/O模式是:“阻塞”模式(Blocki ng Mode )或“非阻塞”模式, 又稱(chēng)為同步模式或異步模式。阻塞模式的優(yōu)點(diǎn):阻塞套接字的I/O操作工作情況比較確定,無(wú)非是調(diào)用、等待、返回 大部分情況下, I/O 操作都能成功地完成,不過(guò)就是花費(fèi)了等待的時(shí)間。因而比較容易使 用,容易編程。缺點(diǎn):在應(yīng)付諸如需要建立多個(gè)套接字連接來(lái)為多個(gè)客戶(hù)服務(wù)的時(shí)候,或在數(shù)據(jù)的收發(fā) 量不均勻的時(shí)候,或在輸入輸出的時(shí)間不確定的時(shí)候,卻顯得性能低下,甚至無(wú)能為力。 非阻塞模式的優(yōu)點(diǎn) :能應(yīng)付諸如需要建立
46、多個(gè)套接字連接來(lái)為多個(gè)客戶(hù)服務(wù),可以處理 數(shù)據(jù)的收發(fā)量不均勻、輸入輸出的時(shí)間不確定等問(wèn)題。非阻塞模式的缺點(diǎn):用非阻塞套接字,需要編寫(xiě)更多的代碼,因?yàn)楸仨毲‘?dāng)?shù)匕盐照{(diào)用I/O 函數(shù)的時(shí)機(jī),盡量減少無(wú)功而返的調(diào)用,還必須詳加分析每個(gè) Winsock 調(diào)用中收到 的 WSAEWOULDBLOCK 錯(cuò)誤,采取相應(yīng)的對(duì)策,這種 I/O 操作的隨機(jī)性使得非阻塞套 接字顯得難于操作。解決方法 :對(duì)于非阻塞的套接字工作模式,進(jìn)一步引入了五種“套接字 I/O 模型”,有助 于應(yīng)該程序通過(guò)一種異步方式,同時(shí)對(duì)一個(gè)或多個(gè)套接字上進(jìn)行的通信加以管理。 對(duì)于阻塞的套接字工作模式,則進(jìn)一步引入了多線(xiàn)程機(jī)制。2 、 簡(jiǎn)述
47、Win32 操作系統(tǒng)下的多進(jìn)程多線(xiàn)程機(jī)制。答: Win32 操作系統(tǒng)還支持同一進(jìn)程的多線(xiàn)程。在一個(gè) Windows 進(jìn)程內(nèi),可以包含多 個(gè)線(xiàn)程。一個(gè)線(xiàn)程 (thread) 是進(jìn)程內(nèi)的一條執(zhí)行路徑,具體地說(shuō),是一個(gè)應(yīng)用程序中的一 條可執(zhí)行路徑,往往是應(yīng)用程序中的一個(gè)或多個(gè)函數(shù)。一個(gè)進(jìn)程中至少要有一個(gè)線(xiàn)程, 習(xí)慣將它稱(chēng)為主線(xiàn)程。任何一個(gè)應(yīng)用程序進(jìn)程都有一個(gè)主線(xiàn)程。3 、 多線(xiàn)程機(jī)制在網(wǎng)絡(luò)編程中如何應(yīng)用? 答:如果一個(gè)應(yīng)用程序,有多個(gè)任務(wù)需要同時(shí)進(jìn)行處理,那就最適合使用多線(xiàn)程機(jī)制。 對(duì)于網(wǎng)絡(luò)上客戶(hù)機(jī)軟件,采用多線(xiàn)程的編程技術(shù),能克服在單線(xiàn)程的編程模式下,由于 阻塞等待而產(chǎn)生的客戶(hù)程序就不能及時(shí)響應(yīng)用
48、戶(hù)的操作命令的問(wèn)題。對(duì)于網(wǎng)絡(luò)上服務(wù)器 軟件,采用多線(xiàn)程的編程技術(shù),能更好地為多個(gè)客戶(hù)服務(wù)。即便是對(duì)于一個(gè)客戶(hù),采用 多線(xiàn)程機(jī)制也能大大提高應(yīng)用程序的運(yùn)行效率。4 、 說(shuō)明用戶(hù)接口線(xiàn)程和工作線(xiàn)程的概念和特點(diǎn)。 答:用戶(hù)接口線(xiàn)程:通常用來(lái)處理用戶(hù)輸入產(chǎn)生的消息和事件,并獨(dú)立地響應(yīng)正在應(yīng)用 程序其它部分執(zhí)行的線(xiàn)程們產(chǎn)生的消息和事件。用戶(hù)接口線(xiàn)程包含一個(gè)消息處理的循環(huán), 以應(yīng)對(duì)各種事件。工作線(xiàn)程:適用于處理那些不要求用戶(hù)輸入并且比較消耗時(shí)間的其他任務(wù)。對(duì)用戶(hù)來(lái)說(shuō), 工作線(xiàn)程運(yùn)行在后臺(tái)。這就使得工作線(xiàn)程特別適合去等待一個(gè)事件的發(fā)生。5 、 簡(jiǎn)述創(chuàng)建 MFC 的工作線(xiàn)程所必需的步驟。答:(1 )是編程實(shí)現(xiàn)
49、控制函數(shù)。2)是創(chuàng)建并啟動(dòng)工作線(xiàn)程(3)創(chuàng)建工作線(xiàn)程的例子。(4)創(chuàng)建工作線(xiàn)程的一般模式。 6、簡(jiǎn)述創(chuàng)建并啟動(dòng)用戶(hù)界面線(xiàn)程所必需的步驟。 答: 1從 CWinThread 類(lèi)派生出自己的線(xiàn)程類(lèi)2改造自己的線(xiàn)程類(lèi) 3創(chuàng)建并啟動(dòng)用戶(hù)界面線(xiàn)程7、如何正常終止線(xiàn)程?如何提前終止線(xiàn)程? 答:正常終止線(xiàn)程:執(zhí)行完畢時(shí)退出控制函數(shù),并返回三個(gè)用來(lái)表示終止原因的值即可。提前終止線(xiàn)程:從線(xiàn)程內(nèi)調(diào)用 AfxEndThread 函數(shù),就可以強(qiáng)迫線(xiàn)程終止。 第八章1 、非阻塞套接字的五種“套接字 I/O 模型”: select (選擇)、WSAAsyncSelect (異步選擇)、 WSAEventSelect (事
50、件選擇)、 Overlapped I/O (重疊式 I/O ) 以及 Completion port (完成端口)。2 、select 模型的操作步驟select (選擇)模型是 Win sock中最常見(jiàn)的I/O模型。它的中心思想是利用select函數(shù), 實(shí)現(xiàn)對(duì)多個(gè)套接字 I/O 的管理。用 select 操作一個(gè)或多個(gè)套接字句柄,一般采用下述步驟:(1)使用 FD_ZERO 宏,初始化自己感興趣的每一個(gè) fd_set 集合。(2) 使用FD_SET宏,將要檢查的套接字句柄添加到自己感興趣的每個(gè)fd_set集合中, 相當(dāng)在指定的 fd_set 集合中,設(shè)置好要檢查的 I/O 活動(dòng)。(3)調(diào)用
51、select 函數(shù),然后等待。 select 完成返回后,會(huì)修改每個(gè) fd_set 結(jié)構(gòu),刪除 那些不存在待決 I/O 操作的套接字句柄,在各個(gè) fd_set 集合中返回符合條件的套接字。(4)根據(jù)select的返回值,使用FD_ISSET宏,對(duì)每個(gè)fd_set集合進(jìn)行檢查,判斷一 個(gè)特定的套接字是否仍在集合中,便可判斷出哪些套接字存在著尚未完成(待決)的 I/O 操作。(5)知道了每個(gè)集合中“待決”的 I/O 操作之后,對(duì)相應(yīng)的套接字的 I/O 進(jìn)行處理,然 后返回步驟 1,繼續(xù)進(jìn)行 select 處理。3、WSAAsyncSelect 異步 I/O 模型的編程步驟用 CreateWindo
52、w 函數(shù)創(chuàng)建一個(gè)窗口,并為該窗口提供一個(gè)窗口回調(diào)例程。調(diào)用 WSAAsyncSelect 函數(shù)創(chuàng)建套接字,指定關(guān)注的套接字、窗口句柄、打算接收的 消息,以及程序感興趣的套接字事件。成功執(zhí)行 WSAAsyncSelec 函數(shù),就打開(kāi)了窗口 的消息通知,并注冊(cè)了事件。WSAAsyncSelec函數(shù)執(zhí)行時(shí),當(dāng)注冊(cè)的套接字事件之一發(fā)生時(shí), 指定的窗口會(huì)收到指 定的消息,并自動(dòng)執(zhí)行該窗口的回調(diào)例程,可在其中添加自己的代碼,處理相應(yīng)的事件。 4、WSAEventSelect 事件選擇模型的編程步驟創(chuàng)建事件對(duì)象句柄 事件選擇模型要求應(yīng)用程序針對(duì)每一個(gè)套接字,首先創(chuàng)建一個(gè)事件對(duì)象。創(chuàng)建方法是調(diào) 用 WSACr
53、eateEvent 函數(shù),定義如下:WSAEVENT WSACreateEvent(void);關(guān)聯(lián)套接字和事件對(duì)象,注冊(cè)關(guān)心的網(wǎng)絡(luò)事件 將事件對(duì)象句柄與某個(gè)套接字關(guān)聯(lián)在一起,同時(shí)注冊(cè)感興趣的網(wǎng)絡(luò)事件類(lèi)型。調(diào)用 WSAEventSelect 函數(shù),函數(shù)的定義為:int WSAEventSelect(SOCKET s,WSAEVENT hEventObject,long lNetworkEvents);等待網(wǎng)絡(luò)事件觸發(fā)事件對(duì)象句柄的工作狀態(tài)調(diào)用 WSAWaitForMultipleEvents 函數(shù),等待網(wǎng)絡(luò)事件觸發(fā)事件對(duì)象句柄的工作狀態(tài)。 該函數(shù)的定義:DWORD WSAWaitForMult
54、ipleEvents(DWORD cEvents,const WSAEVENT FAR * lphEvents,BOOL fWaitAll,DWORD dwTimeout,BOOL fAlertable);檢查套接字上所發(fā)生的網(wǎng)絡(luò)事件類(lèi)型調(diào)用 WSAEnumNetworkEvents 函數(shù),檢查套接字上發(fā)生了什么類(lèi)型的網(wǎng)絡(luò)事件。該函 數(shù)定義如下:int WSAE numNetworkEve nts(SOCKET s,WSAEVENT hEve ntObject,LPWSANETWORKEVENTSlpNetworkEve nts);處理網(wǎng)絡(luò)事件在確定了套接字上發(fā)生的網(wǎng)絡(luò)事件類(lèi)型后,可以根據(jù)不同
55、的情況做出相應(yīng)的處理。完成 了對(duì)WSANETWORKEVENTS結(jié)構(gòu)中的事件的處理之后,應(yīng)用程序應(yīng)在所有可用的套接 字上,繼續(xù)等待更多的網(wǎng)絡(luò)事件。應(yīng)用程序完成了對(duì)一個(gè)事件對(duì)象的處理后,便應(yīng)調(diào)用WSACIoseEve nt函數(shù),釋放由事件句柄使用的系統(tǒng)資源。函數(shù)的定義如下:BOOL WSACloseEve nt(WSAEVENThEve nt);該函數(shù)也將一個(gè)事件句柄作為自己唯一的參數(shù),并會(huì)在成功后返回TRUE,失敗后返回FALSE。第九章1、什么是HTTP會(huì)話(huà)? HTTP會(huì)話(huà)周期由哪些階段組成?HTTP是超文本傳輸協(xié)議(Hypertext Transfer Protocol)的簡(jiǎn)稱(chēng),HTTP協(xié)
56、議也是基于TCP/IP的客戶(hù)/服務(wù)器協(xié)議。主要是用于傳輸文件的協(xié)議。HTTP會(huì)話(huà)周期由連接、請(qǐng)求、響應(yīng)和斷開(kāi) 4個(gè)階段組成。建立TCP/IP連接Web客戶(hù)機(jī)向服務(wù)器發(fā)送HTTP請(qǐng)求服務(wù)器向客戶(hù)機(jī)回送HTTP響應(yīng)斷開(kāi)TCP/IP連接2、CHtmlView 類(lèi)的繼承關(guān)系I砰罰石抵旦訂I I 匸I匚 pcrgliPW 丹亡,齊I庭丹"I3、利用MFC AppWizard 創(chuàng)建SDI或MDI的步驟(1) 第一步:選擇應(yīng)用程序結(jié)構(gòu) 為應(yīng)用程序選擇三種結(jié)構(gòu)之一, 單文檔(Single Document SDI),多文檔(Multiple Document MDI),基于對(duì)話(huà)框(Dialog Based)。Web瀏覽器型的應(yīng)用程序一般選擇 SDI類(lèi)型,以下的操作都假定選擇了 SDI類(lèi)型。 決定應(yīng)用程序是否要支持 MFC 的文檔 / 視圖結(jié)構(gòu)( document/view architecture ), 實(shí)際上必須選擇支持,因?yàn)?/p>
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 遼源職業(yè)技術(shù)學(xué)院《建筑工業(yè)化與裝配式結(jié)構(gòu)》2023-2024學(xué)年第一學(xué)期期末試卷
- 廊坊職業(yè)技術(shù)學(xué)院《計(jì)算機(jī)通信網(wǎng)絡(luò)》2023-2024學(xué)年第一學(xué)期期末試卷
- 江西水利職業(yè)學(xué)院《汽車(chē)輕量化技術(shù)》2023-2024學(xué)年第一學(xué)期期末試卷
- 建東職業(yè)技術(shù)學(xué)院《法語(yǔ)二外》2023-2024學(xué)年第一學(xué)期期末試卷
- 湖州學(xué)院《項(xiàng)目設(shè)計(jì)》2023-2024學(xué)年第一學(xué)期期末試卷
- 湖南國(guó)防工業(yè)職業(yè)技術(shù)學(xué)院《混凝土結(jié)構(gòu)基本原理A》2023-2024學(xué)年第一學(xué)期期末試卷
- 呼倫貝爾職業(yè)技術(shù)學(xué)院《數(shù)量分析方法》2023-2024學(xué)年第一學(xué)期期末試卷
- 自貢職業(yè)技術(shù)學(xué)院《仿真實(shí)訓(xùn)》2023-2024學(xué)年第一學(xué)期期末試卷
- 周口理工職業(yè)學(xué)院《生物化工設(shè)備》2023-2024學(xué)年第一學(xué)期期末試卷
- 重慶科創(chuàng)職業(yè)學(xué)院《網(wǎng)絡(luò)課程綜合》2023-2024學(xué)年第一學(xué)期期末試卷
- 2024年08月云南省農(nóng)村信用社秋季校園招考750名工作人員筆試歷年參考題庫(kù)附帶答案詳解
- 防詐騙安全知識(shí)培訓(xùn)課件
- 心肺復(fù)蘇課件2024
- 2024年股東股權(quán)繼承轉(zhuǎn)讓協(xié)議3篇
- 2024-2025學(xué)年江蘇省南京市高二上冊(cè)期末數(shù)學(xué)檢測(cè)試卷(含解析)
- 四川省名校2025屆高三第二次模擬考試英語(yǔ)試卷含解析
- 考研有機(jī)化學(xué)重點(diǎn)
- 全國(guó)身份證前六位、區(qū)號(hào)、郵編-編碼大全
- 《GPU體系結(jié)構(gòu)》課件2
- 三年級(jí)語(yǔ)文上冊(cè) 期末古詩(shī)詞專(zhuān)項(xiàng)訓(xùn)練(二)(含答案)(部編版)
- 《護(hù)士條例》課件
評(píng)論
0/150
提交評(píng)論