版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、PAGE PAGE 33摘 要本文詳細(xì)論述了在線聊天系統(tǒng)的開發(fā)和實(shí)現(xiàn)過(guò)程,從需求分析、系統(tǒng)功能分析、系統(tǒng)功能模塊設(shè)計(jì)、系統(tǒng)功能的實(shí)現(xiàn)和運(yùn)行調(diào)試等幾大方面敘述了該管理系統(tǒng)的性能及功能的實(shí)現(xiàn),其中也包括了在開發(fā)過(guò)程中出現(xiàn)的問(wèn)題難點(diǎn)及解決方案等信息。本系統(tǒng)是在Windows2000下使用現(xiàn)在流行的編程工具Visual C+開發(fā)。以Visual C+的MFC(微軟基本類庫(kù))作為基本的的開發(fā)基礎(chǔ)。本系統(tǒng)使用Socket套接字作為開發(fā)的應(yīng)用程序開發(fā)模型,使用Sockets原型開發(fā),可以方便的建立連接,數(shù)據(jù)傳輸,和斷開連接,從而實(shí)現(xiàn)網(wǎng)絡(luò)在線聊天系統(tǒng)的在線好友查找,發(fā)送消息和接收消息.本文詳細(xì)的介紹了網(wǎng)絡(luò)在線
2、聊天系統(tǒng)的開發(fā)背景、開發(fā)工具、運(yùn)行環(huán)境的選擇,系統(tǒng)功能分析,客戶端和服務(wù)器端的建立連接、消息的發(fā)送、消息的接收、消息的處理和斷開連接、界面設(shè)計(jì)和功能實(shí)現(xiàn)方面的信息,并詳細(xì)說(shuō)明了在開發(fā)過(guò)程中的遇到的難點(diǎn)和問(wèn)題,本系統(tǒng)實(shí)現(xiàn)了在用戶需求分析階段所提出的所有要求,用戶可以隨時(shí)和服務(wù)器建立和斷開連接。方便的連接和斷開連接的方法是Socket的優(yōu)點(diǎn)所在。關(guān)鍵字:網(wǎng)絡(luò)、通信、套接字、連接目錄序言1第一章 VisualC+及Socket套接字介紹3 一 VisualC+ 介紹3 二 Socket套接字介紹4 第二章 軟件需求分析14 一 系統(tǒng)客戶要求14 二 系統(tǒng)詳細(xì)設(shè)計(jì)15三 系統(tǒng)開發(fā)目標(biāo)16四 系統(tǒng)開發(fā)思
3、路16五 需求總結(jié)17第三章 系統(tǒng)具體實(shí)現(xiàn)20一 概要設(shè)計(jì)20二 定義服務(wù)器端和客戶端的通信結(jié)構(gòu)及含義21 三 服務(wù)器端的實(shí)現(xiàn)流圖24四 客戶端的實(shí)現(xiàn)流圖28第四章 系統(tǒng)測(cè)試 29第五章 系統(tǒng)運(yùn)行和維護(hù)31第六章 結(jié)束語(yǔ)32參考文獻(xiàn)33序 言隨著現(xiàn)代技術(shù)的不斷輸入和信息化的廣泛普及,網(wǎng)絡(luò)作為一種新興事物,在近些年得到了前所未有的普及和深入,網(wǎng)絡(luò)上的各種應(yīng)用層出不窮,給各個(gè)階層、各個(gè)年齡段的用戶提供了不同的個(gè)性化的服務(wù)。而現(xiàn)代中小型企業(yè)的領(lǐng)導(dǎo)認(rèn)識(shí)到進(jìn)一步提高企業(yè)信息化的必要性。為使企業(yè)能在瞬息萬(wàn)變的信息時(shí)代生存下去,適應(yīng)激烈的市場(chǎng)競(jìng)爭(zhēng),現(xiàn)代企業(yè)要求正加員工之間的交流和通信能力,尤其是領(lǐng)導(dǎo)和員工之
4、間的共同能力,實(shí)時(shí)的交流系統(tǒng)就是在這種條件下誕生的。系統(tǒng)開發(fā)是一個(gè)十分復(fù)雜的系統(tǒng)工程。這里對(duì)系統(tǒng)開發(fā)的基本過(guò)程和方法進(jìn)行介紹,列出相關(guān)文檔的示例并加以說(shuō)明。網(wǎng)絡(luò)通信是網(wǎng)絡(luò)應(yīng)用的重要體現(xiàn)方面。網(wǎng)上即時(shí)通信則是網(wǎng)絡(luò)應(yīng)用的重要體現(xiàn)方面。本聊天系統(tǒng)主要應(yīng)用于小型企業(yè),學(xué)校或小型局域網(wǎng)內(nèi)部使用。本應(yīng)用程序使短距離交流更加快捷和便利。更能高效率的體現(xiàn)現(xiàn)代即時(shí)通信的特點(diǎn)。本系統(tǒng)能夠滿足中小型企業(yè),學(xué)校的內(nèi)部網(wǎng)絡(luò)即時(shí)通信的需要,在內(nèi)部網(wǎng)絡(luò)正常環(huán)境的運(yùn)營(yíng)下,提供即時(shí)通信的能力,本系統(tǒng)使用Visual C+開發(fā),本系統(tǒng)能夠?yàn)橹行⌒推髽I(yè)協(xié)同工作,相互間的交流提供了有力的工具,運(yùn)用在局域網(wǎng)的本系統(tǒng),能夠?yàn)槠髽I(yè)員工的交
5、流提供幫助,有利于提高工作效率,第一章 VisualC+及Socket套接字介紹一 Visual C 介紹和其他編程工具相比,Visual C+在提供可視化編程方法的同時(shí),適應(yīng)于編寫直接對(duì)系統(tǒng)進(jìn)行底層操作的程序.其生成代碼的質(zhì)量,也要優(yōu)于許多其他開發(fā)工具.Visual C+所提供的MFC(Microsoft基本類庫(kù)),對(duì)Window98/NT/2000所用的Win32 API(應(yīng)用程序接口)進(jìn)行了徹底的封裝,這使得可以使用完全的面向?qū)ο蟮木幊谭椒▉?lái)進(jìn)行Windows程序的開發(fā),并能夠大大縮短程序的開發(fā)周期,降低開發(fā)成本,把Windows程序員從大量復(fù)雜的勞動(dòng)中解放出來(lái).Visual C+給應(yīng)用
6、程序的開發(fā)人員提供了豐富的功能,Visual C+通過(guò)MFC庫(kù)提供了一個(gè)完整的應(yīng)用程序的骨架,開發(fā)人員可以忽略應(yīng)用程序的入口點(diǎn)和結(jié)束地點(diǎn),并且可以忽略消息在應(yīng)用程序的流動(dòng)順序,通過(guò)MFC的支持Visual C+也提供了Document-View(文檔視圖)的應(yīng)用程序的結(jié)構(gòu),開發(fā)人員可以將數(shù)據(jù)保存在Document類的對(duì)象上,而在屏幕的顯示的數(shù)據(jù)由View類的對(duì)象來(lái)負(fù)責(zé)。通過(guò)MFC的支持Visual C+也實(shí)現(xiàn)了面向?qū)ο箢I(lǐng)域的RTTI(RunTime Type Information 運(yùn)行時(shí)類型識(shí)別)、Dynamic Creation(動(dòng)態(tài)創(chuàng)建)、(Persitence)永久保存機(jī)制,同時(shí)他也實(shí)
7、現(xiàn)了Windows下的Message Mapping(消息映射)和Command Routing(命令傳遞),通過(guò)MFC的Cdatabase和Crecordset類Visual C+可以實(shí)現(xiàn)數(shù)據(jù)庫(kù)的應(yīng)用,通過(guò)ChtmlStream、CHttpFilter、CHttpFilterContext、ChttpServer等ISAPI(Internet Server API)可以很好的支持Internet上的http協(xié)議相關(guān)的操作。由于MFC涉及到應(yīng)用程序開發(fā)的各個(gè)領(lǐng)域,其Visual C+成為倍受歡迎的開發(fā)工具。二 Socket套接字介紹Winsock是一套開放的,支持多種協(xié)議的Windows下網(wǎng)絡(luò)
8、編程接口,是Windows網(wǎng)絡(luò)編程實(shí)是上的標(biāo)準(zhǔn).應(yīng)用程序通過(guò)調(diào)用Winsock的API實(shí)現(xiàn)相互間的通信,而Winsock利用下層的網(wǎng)絡(luò)通信協(xié)議功能和操作系統(tǒng)調(diào)用實(shí)現(xiàn)實(shí)際的通信工作.1 套接字(Sockets)套接字是通信的基石,是支持TCP/IP協(xié)議的網(wǎng)絡(luò)通信的操作單元.可以將套接字看作不同主機(jī)間的進(jìn)程進(jìn)行雙向通信的端點(diǎn),它構(gòu)成了單個(gè)主機(jī)內(nèi)及整個(gè)網(wǎng)絡(luò)間的編程界面.套接字存在于通信域中.通信域是為了處理一般的線程通過(guò)套接字通信而引進(jìn)的一種抽象概念.套接字通過(guò)通常和同一個(gè)域中的套接字交換數(shù)據(jù)(數(shù)據(jù)交換也可能穿越域的界限,但這時(shí)一定要執(zhí)行某種解釋程序).Winsock規(guī)范支持單一的通信域,即Inte
9、rnet域.各種進(jìn)程使用這個(gè)域互相之間用Internet協(xié)議簇來(lái)進(jìn)行通信(Winsock 1.1以上的版本支持其他的域)。套接字可以根據(jù)通信性質(zhì)分類,這種性質(zhì)對(duì)于用戶時(shí)可見的.應(yīng)用程序一般僅在同一類的套接字間通信.不過(guò)只要底層的通信協(xié)議允許,不同類型的套接字間也照樣可以通信進(jìn)入九十年代后,隨著計(jì)算機(jī)和網(wǎng)絡(luò)技術(shù)的發(fā)展,很多數(shù)據(jù)處理系統(tǒng)都采用開放系統(tǒng)結(jié)構(gòu)的客戶機(jī)/服務(wù)器網(wǎng)絡(luò)模式,即客戶機(jī)提出任務(wù)請(qǐng)求,通過(guò)網(wǎng)絡(luò)發(fā)送給服務(wù)器,由服務(wù)器做相應(yīng)處理,執(zhí)行被請(qǐng)求的任務(wù),然后將結(jié)果返回給客戶機(jī)。例如:銀行ATM的前置機(jī)和數(shù)據(jù)處理的主機(jī)之間即構(gòu)成客戶機(jī)/服務(wù)器網(wǎng)絡(luò)模式;電話銀行的前置機(jī)和銀行數(shù)據(jù)處理機(jī)之間也構(gòu)成
10、這種網(wǎng)絡(luò)模式結(jié)構(gòu)等。這樣,如何在前置機(jī)和數(shù)據(jù)主機(jī)之間進(jìn)行信息交換,即進(jìn)程網(wǎng)絡(luò)通信,就成為實(shí)現(xiàn)這種網(wǎng)絡(luò)模式的基礎(chǔ)。而TCP/IP的套接字技術(shù)是解這一問(wèn)題的有力工具。它從提出時(shí)就一直發(fā)揮著愈來(lái)愈重要的作用,并已成為UNIX操作系統(tǒng)下TCP/IP網(wǎng)絡(luò)編程標(biāo)準(zhǔn);甚至WINDOW、JAVA都配有它的通用接口。有了這個(gè)強(qiáng)有力的工具,我們可以實(shí)現(xiàn)異種機(jī)、異種操作系統(tǒng)應(yīng)用程序間的相互連接和通信。套接字(sockets)是支持TCP/IP協(xié)議的網(wǎng)絡(luò)通信的基本操作單元??梢詫⑻捉幼挚醋鞑煌鳈C(jī)間的進(jìn)程進(jìn)行雙向通信的端點(diǎn)。它構(gòu)成了在單個(gè)主機(jī)內(nèi)及整個(gè)網(wǎng)際間的編程界面。一般來(lái)說(shuō),跨機(jī)應(yīng)用進(jìn)程之間要在網(wǎng)絡(luò)環(huán)境下進(jìn)行通信,
11、必須要在網(wǎng)絡(luò)的每一端都要建立一個(gè)套接字,兩個(gè)套接字之間是可以建立連接的,也是可以無(wú)連接的,并通過(guò)對(duì)套接字的“讀”、“寫”操作實(shí)現(xiàn)網(wǎng)絡(luò)通信功能。類似于UNIX系統(tǒng)中的I/O概念,像文件那樣有打開、讀、寫、關(guān)閉的方式。根據(jù)傳輸數(shù)據(jù)類型的不同,套按字可分為面向連接的數(shù)據(jù)套接字(streamsockets)和無(wú)連接的數(shù)據(jù)報(bào)套接字(datagramsockets)兩種類型:(1)字節(jié)流套接字字節(jié)流不按記錄定界,在TCP/IP協(xié)議簇中對(duì)應(yīng)TCP協(xié)議,即傳輸控制協(xié)議(TransmitionControlProtocol)。它是一個(gè)提供給用戶進(jìn)程可靠的全雙工的面向連接的協(xié)議,大多數(shù)INTERNET應(yīng)用程序如f
12、tp、telnet使用TCP協(xié)議。通信端點(diǎn)使用TCP對(duì)應(yīng)的INTERNET地址互相連接,可保證按正確的順序以及單一和可靠的地址傳輸數(shù)據(jù)。由于它是字節(jié)流,所以包長(zhǎng)包沒(méi)有限制,信包傳輸也不重復(fù),因而是一種常用的套接字類型。流套接字提供雙向的,有序的,無(wú)重復(fù)并且無(wú)記錄邊界的數(shù)據(jù)流服務(wù),它適應(yīng)于處理大量數(shù)據(jù).網(wǎng)絡(luò)傳輸層可以將數(shù)據(jù)分散或集中到合適尺寸的數(shù)據(jù)包中。 (2)數(shù)據(jù)報(bào)套接字?jǐn)?shù)據(jù)報(bào)對(duì)應(yīng)記錄型數(shù)據(jù)流,在TCP/IP協(xié)議簇中對(duì)應(yīng)UDP協(xié)議,即用戶數(shù)據(jù)報(bào)協(xié)議(UserDatagramProtocol)。利用數(shù)據(jù)報(bào)服務(wù)可實(shí)現(xiàn)一些簡(jiǎn)單的網(wǎng)絡(luò)服務(wù),如網(wǎng)點(diǎn)檢測(cè)程序PING。由于不建立連接,數(shù)據(jù)報(bào)協(xié)議比連接協(xié)議快
13、。但不能保證所有數(shù)據(jù)都準(zhǔn)確有序地到達(dá)目的地。不保證順序性、可靠性和無(wú)重復(fù)性。它是無(wú)連接的服務(wù),以獨(dú)立的信包進(jìn)行傳輸,通信端點(diǎn)使用UDP對(duì)應(yīng)的INTERNET地址。雙方不需互連,按固定的最大長(zhǎng)度進(jìn)行傳輸,因而適用于單個(gè)報(bào)文傳輸,或較小文件的傳輸。數(shù)據(jù)報(bào)套接字支持雙向的數(shù)據(jù)流,但不保證數(shù)據(jù)傳輸?shù)目煽啃?有序性,和無(wú)重復(fù)性.也就是說(shuō),一個(gè)從數(shù)據(jù)報(bào)套接字接受信息的進(jìn)程有可能發(fā)現(xiàn)信息重復(fù),或者和發(fā)出時(shí)間順序不同的情況.此外,數(shù)據(jù)報(bào)套接字的一個(gè)重要特點(diǎn)是它保留了記錄邊界。2套接字的編程要點(diǎn)及過(guò)程不論何種套接字編程,均采用客戶機(jī)/服務(wù)器方式,其運(yùn)作過(guò)程基本類似,限于篇幅,這里僅介紹字節(jié)流套接字。字節(jié)流套按字
14、的服務(wù)進(jìn)程和客戶進(jìn)程,在通信前必須創(chuàng)建各自的套接字以建立連接,然后對(duì)相應(yīng)的套接字進(jìn)行“讀”、“寫”操作,實(shí)現(xiàn)信息的交換。服務(wù)器進(jìn)程創(chuàng)建套接字。服務(wù)進(jìn)程總是先于客戶進(jìn)程啟動(dòng),服務(wù)進(jìn)程首先調(diào)用socket()函數(shù)創(chuàng)建自已端的一個(gè)字節(jié)流套接字,并提供三個(gè)參數(shù):網(wǎng)絡(luò)地址類型,一般取AF_INEF(AdressfamilyInterNET);套接字類型,這里取SOCK_STREAM;網(wǎng)絡(luò)協(xié)議,缺省為TCP/IP協(xié)議,對(duì)應(yīng)參數(shù)為0。給套接字地址變量賦初值。在生成套接字后,要用服務(wù)器的地址先對(duì)sockaddr_in結(jié)構(gòu)變量賦初值。sockaddr_in它只適用INTERNET地址類型,含有INTERNET套
15、接字地址類型、IP端口號(hào)、IP地址等信息。地址類型可取定為AF_INET,IP地址對(duì)服務(wù)器可取任意合法地址INADDR_ANY。IP端口號(hào)可由用戶設(shè)定,但要注意主機(jī)字節(jié)順序向網(wǎng)絡(luò)字節(jié)順序的轉(zhuǎn)換。給套接字命名。由socket()函數(shù)創(chuàng)建的套接字是沒(méi)有名字的。所謂命名,就是用bind()函數(shù)將服務(wù)器地址捆綁到創(chuàng)建的套接字上。服務(wù)器進(jìn)程準(zhǔn)備接受來(lái)自客戶機(jī)的連接請(qǐng)求。首先調(diào)用listen()函數(shù),讓服務(wù)器進(jìn)程進(jìn)入監(jiān)聽狀態(tài);然后調(diào)用accept()函數(shù),準(zhǔn)備接受客戶機(jī)的連接信號(hào)。無(wú)連接請(qǐng)求時(shí),服務(wù)進(jìn)程被阻塞??蛻暨M(jìn)程調(diào)用socket()函數(shù)創(chuàng)建已端的套接字。給客戶端的sockaddr_in結(jié)構(gòu)體變量賦值
16、。地址類型仍可取AF_INET,端口號(hào)和服務(wù)器方的端口號(hào)相同,欲連服務(wù)器的地址通過(guò)調(diào)用inet_addr()轉(zhuǎn)換得到。也可通過(guò)gethostbyname()函數(shù)將名字轉(zhuǎn)換為指向hostent結(jié)構(gòu)變量的指針,再將hostent結(jié)構(gòu)變量的地址成員用bcopy()復(fù)制到sockaddr_in結(jié)構(gòu)變量上??蛻舴秸{(diào)用connect()函數(shù)向服務(wù)進(jìn)程發(fā)出連接請(qǐng)求。當(dāng)連接請(qǐng)求到來(lái)后,被阻塞服務(wù)進(jìn)程的accpet()函數(shù)生成一個(gè)新的字節(jié)流套接字,并返回客戶機(jī)的sockaddr_in結(jié)構(gòu)變量,從而在服務(wù)器應(yīng)用程序中用新的被賦予客戶機(jī)地址的套接字同客戶進(jìn)程進(jìn)行連接,然后向客戶方返回接受信號(hào)。一旦客戶機(jī)的套接字收到
17、來(lái)自服務(wù)器的接受信號(hào),則表示客戶機(jī)與服務(wù)器雙方已實(shí)現(xiàn)連接。任一方均可向?qū)Ψ桨l(fā)送,也可接收對(duì)方發(fā)來(lái)的數(shù)據(jù)。這既可通過(guò)send()、recv()函數(shù)來(lái)實(shí)現(xiàn)。也可通過(guò)read()、write()函數(shù)來(lái)交換數(shù)據(jù)。服務(wù)進(jìn)程和客戶進(jìn)程可通過(guò)調(diào)用shutdown()和colse()關(guān)閉套接字上的所有發(fā)送和接收操作,撤銷套接字并中斷連接3 基本概念(1)帶外數(shù)據(jù)帶外數(shù)據(jù),也稱為TCP緊急數(shù)據(jù),它是相連的每一對(duì)流套接字間的一個(gè)邏輯上獨(dú)立的傳輸通道,帶外數(shù)據(jù)是獨(dú)立于普通數(shù)據(jù)傳輸給用戶的,這一抽象要求帶外數(shù)據(jù)設(shè)備必須支持每一時(shí)刻僅有一個(gè)帶外數(shù)據(jù)信息等候發(fā)送。對(duì)于僅支持帶外數(shù)據(jù)的通信協(xié)議來(lái)說(shuō)(例如緊急數(shù)據(jù)是與普通數(shù)據(jù)
18、在同一序列發(fā)送),系統(tǒng)通常把緊急數(shù)據(jù)從普通數(shù)據(jù)中分離出來(lái)單獨(dú)存放。這就允許用戶可以在順序接受緊急數(shù)據(jù)和非順序接收緊急數(shù)據(jù)之間作出選擇。(2)廣播數(shù)據(jù)報(bào)套接字可以用來(lái)向許多系統(tǒng)支持的網(wǎng)絡(luò)發(fā)送廣播數(shù)據(jù)包。要實(shí)現(xiàn)這種功能,網(wǎng)絡(luò)必須支持廣播功能。為此系統(tǒng)軟件并不提供對(duì)廣播功能的任何模擬。廣播信息將會(huì)給網(wǎng)絡(luò)造成極重的負(fù)擔(dān),為此它們要求網(wǎng)絡(luò)上的每臺(tái)主機(jī)都為他們服務(wù),所以發(fā)送廣播數(shù)據(jù)包的能力被限制于那些用顯式標(biāo)記了允許廣播的套接字中。廣播通常應(yīng)用于以下兩種情況:一個(gè)應(yīng)用程序希望在本地網(wǎng)絡(luò)中找到一個(gè)資源。而應(yīng)用程序?qū)υ撡Y源的地址又沒(méi)有任何先驗(yàn)的知識(shí)。一些重要功能,例如路由要求把它們的信息發(fā)送給所有可以找到的鄰
19、機(jī)。被廣播信息的目的地址取決于這一信息將在何種網(wǎng)絡(luò)上廣播。Internet域中支持一個(gè)速記地址INADDR_BROADCAST用于廣播。由于使用廣播以前必須綁定一個(gè)數(shù)據(jù)包套接字,所以所有收到的廣播消息都帶有發(fā)送者的地址和端口。(3)字節(jié)順序不同的計(jì)算機(jī)有時(shí)使用不同的字節(jié)順序存儲(chǔ)數(shù)據(jù)。例如,基于Intel處理器的計(jì)算機(jī)和Macintosh計(jì)算機(jī)使用了相反的字節(jié)排序順序。Intel的字節(jié)順序被成為“Little-Endian”,它與網(wǎng)絡(luò)的字節(jié)排序順序“Big-Endian”排序順序相反。任何從Winsock函數(shù)對(duì)IP地址和端口號(hào)的引用和傳送給Winsock函數(shù)的IP地址和端口號(hào)均是按照網(wǎng)絡(luò)順序組織
20、的,這也包括了sockaddr_in這一數(shù)據(jù)結(jié)構(gòu)中的IP地址域和端口域考慮到一個(gè)應(yīng)用程序通常用與“時(shí)間”服務(wù)對(duì)應(yīng)的端口來(lái)和服務(wù)器連接,而服務(wù)器提供某些機(jī)制來(lái)通知用戶使用另一端口。為此getservbyname函數(shù)返回的端口已經(jīng)是網(wǎng)絡(luò)順序了,可以直接使用來(lái)組織成一個(gè)地址,而不需要進(jìn)行轉(zhuǎn)換。然而如果從主機(jī)順序轉(zhuǎn)換成網(wǎng)絡(luò)順序。相應(yīng)地,如果應(yīng)用程序希望顯示包含于某一地址中地端口號(hào),則這一端口號(hào)就必須在被顯示前從網(wǎng)絡(luò)順序轉(zhuǎn)換到主機(jī)順序。(4)阻塞和非阻塞套接字可以處于阻塞模式或非阻塞模式。調(diào)用任何一個(gè)阻塞模式地函數(shù),都回產(chǎn)生相同地后果-耗費(fèi)或長(zhǎng)或短地時(shí)間等待操作地完成。而當(dāng)套接字處于非阻塞模式時(shí),API
21、函數(shù)的調(diào)用會(huì)立即返回,大多數(shù)情況這些調(diào)用都回“失敗”,并返回一個(gè)WASEWOULDBLOCK的錯(cuò)誤,它意味著請(qǐng)求的操作在調(diào)用期間沒(méi)有時(shí)間完成。Winsock的套接字I/O模型可以幫助應(yīng)用程序判斷一個(gè)套接字何時(shí)可供讀寫.套接字的行為在Windows 9X 和Windows NT中與在 Windows 3.1中不同.在32位操作系統(tǒng)中,可以采用多線程編程,在不同的線程中使用套接字,這樣即使某個(gè)線程中的套接字被阻塞,也不會(huì)影響應(yīng)用程序的其他操作,同時(shí)也不會(huì)在阻塞線程上耗費(fèi)CPU時(shí)間。(5) Winsock編程原理進(jìn)入20世紀(jì)90年代后,隨著計(jì)算機(jī)和網(wǎng)絡(luò)技術(shù)的發(fā)展,很多數(shù)據(jù)處理系統(tǒng)都采用開放系統(tǒng)結(jié)構(gòu)的
22、客戶機(jī)/服務(wù)器(Client/Server)網(wǎng)絡(luò)模型,即客戶機(jī)向服務(wù)器提交請(qǐng)求,服務(wù)器對(duì)請(qǐng)求做相應(yīng)的處理兵執(zhí)行被請(qǐng)求的任務(wù),然后將結(jié)構(gòu)返回給客戶機(jī)。這種方式隱含了在建立客戶機(jī)/服務(wù)器間通信是的非對(duì)稱性??蛻魴C(jī)/服務(wù)器模型工作時(shí)要求有一套為客戶機(jī)和服務(wù)器所共識(shí)的慣例來(lái)保證服務(wù)能夠被提供(或被接受),這一套慣例包含了一套協(xié)議,它必須在通信的兩頭都被實(shí)現(xiàn)。根據(jù)不同的實(shí)際情況,協(xié)議可能是對(duì)稱的或非對(duì)稱的。在對(duì)稱的協(xié)議中每一方都有可能扮演主從角色;在非對(duì)稱協(xié)議中一方被不可改變地認(rèn)為是主機(jī),而另一方則是從機(jī)。一個(gè)對(duì)稱協(xié)議地例子是Internet中用于終端仿真地Telnet,而非對(duì)稱協(xié)議地例子是Intern
23、et中的http。無(wú)論具體的協(xié)議是對(duì)稱的或是非對(duì)稱的,當(dāng)服務(wù)被提供時(shí)必然存在客戶進(jìn)程和服務(wù)進(jìn)程。 (6) MFC Windows Socket類Visual C+對(duì)眾多的socket函數(shù)進(jìn)行了封裝,MFC提供的封裝類是:CAsyncSocket和CSocket類,它們使編程工作變得相對(duì)簡(jiǎn)單尤其是CSocket類:CAsyncSocket類所提供的唯一的抽象就是將與套接字相聯(lián)系的Windows消息以回調(diào)函數(shù)的形式表示,因此它帶來(lái)的唯一方便就是程序員無(wú)需自行處理Winsock的I/O模型,而對(duì)于如阻塞處理、字節(jié)順序差異以及Unicode等依然負(fù)有責(zé)任并有靈活的控制權(quán)。CSocket類是CAsync
24、Socket類的派生類,它提供了對(duì)通過(guò)Carchive對(duì)象使用套接字工作的更高級(jí)抽象。CSocket類的使用比CAsynCSocket類更加容易,它繼承了CAsyncSocket類的許多封裝了API的成員函數(shù),并且管理了通信的大多數(shù)方面,這使得用戶從原來(lái)不得不使用原始API或者CAsyncSocket類的煩雜的工作中解脫出來(lái)。更加重要的是CSocket和Carchive類提供了對(duì)于同步操作Carchive對(duì)象十分重要的阻塞功能,且CSocket通過(guò)與CSocketFile和Carchive一起使用來(lái)管理對(duì)象數(shù)據(jù)的發(fā)送和接收,使發(fā)送數(shù)據(jù)和操作變得簡(jiǎn)單明了。以下使CSocket對(duì)象與串行化技術(shù)及C
25、Socket類的編程模型。第二章 軟件需求分析一 系統(tǒng)客戶要求需求分析是軟件分析中的一個(gè)重要步驟。它的基本任務(wù)是要準(zhǔn)確地分析出系統(tǒng)應(yīng)用者的需要,以及系統(tǒng)目標(biāo)必須具備哪些功能。這些功能必須準(zhǔn)確地,完整地體現(xiàn)出用戶的要求根據(jù)網(wǎng)絡(luò)應(yīng)用程序的特點(diǎn),網(wǎng)絡(luò)在線聊天系統(tǒng)應(yīng)就有即時(shí),快速的特點(diǎn)。服務(wù)器端和客戶端應(yīng)就有不同的功能特性。對(duì)于服務(wù)器端應(yīng)能夠正確地建立與客戶端的連接并能正確地?cái)嚅_,能即時(shí)地接收、處理和發(fā)送接收到的數(shù)據(jù)。能及時(shí)地通知在線用戶當(dāng)前好友在線狀況,能夠處理非正常數(shù)據(jù)的能力。對(duì)于客戶端應(yīng)能夠快速地檢查是否能夠連接到服務(wù)器端。能正確的獲得和反映當(dāng)前好友在線情況。能夠正確的與特定好友交流。能及時(shí)地接
26、收到服務(wù)器端地?cái)?shù)據(jù),并能即時(shí)處理數(shù)據(jù),并能將處理結(jié)果反映給用戶。服務(wù)器端:能夠正確地、無(wú)沖突地啟動(dòng)服務(wù)器。監(jiān)聽指定的端口,等待用戶的連接。建立與客戶端的邏輯連接,并能通知其他好友。向新進(jìn)入的好友發(fā)出已上線的好友名單。接收客戶端的消息請(qǐng)求,并能正確無(wú)誤地處理消息,并能發(fā)出消息到客戶端。反映當(dāng)前在線人數(shù)和在線好友狀況。及時(shí)地反映發(fā)出地消息和聊天消息。當(dāng)好友斷開與服務(wù)器端地連接時(shí),服務(wù)器能夠正確地?cái)嚅_連接,并通知其他用戶。當(dāng)用戶違反聊天系統(tǒng)規(guī)定時(shí),服務(wù)器系統(tǒng)管理員能夠斷開與此用戶的連接。當(dāng)服務(wù)器關(guān)閉時(shí),應(yīng)通知所有用戶??蛻舳耍耗軌蛘_啟動(dòng)應(yīng)用程序,并能向服務(wù)器發(fā)出連接請(qǐng)求。反映當(dāng)前好友在線情況。能夠
27、向群體或指定好友發(fā)出消息能夠及時(shí)接收好友發(fā)出消息,并通知用戶。能夠正確地?cái)嚅_與服務(wù)器端地的連接。二 系統(tǒng)詳細(xì)設(shè)計(jì)對(duì)現(xiàn)行管理業(yè)務(wù)進(jìn)行了詳細(xì)調(diào)查研究,了解了系統(tǒng)需求和進(jìn)行了系統(tǒng)分析與設(shè)計(jì)工作。對(duì)員工進(jìn)行全面、細(xì)致而充分的調(diào)查研究和到生產(chǎn)和管理的現(xiàn)場(chǎng)去,并通過(guò)座談、詢問(wèn)后,自上而下逐步細(xì)化的進(jìn)行了了解,調(diào)查的內(nèi)容涉及到企業(yè)的發(fā)展目標(biāo)、經(jīng)營(yíng)管理情況,通過(guò)系統(tǒng)流程圖中的部分圖形工具來(lái)描述管理業(yè)務(wù)活動(dòng),進(jìn)行規(guī)范化說(shuō)明。流程圖如下:用戶運(yùn)行客戶端端應(yīng)用程序用戶運(yùn)行客戶端端應(yīng)用程序用戶名存在,從新填寫用戶名存在,從新填寫填寫用戶姓名 提交到服務(wù)器填寫用戶姓名 提交到服務(wù)器不存在同名,用戶登陸到聊天室,等待好友
28、消息或向好友發(fā)出消息不存在同名,用戶登陸到聊天室,等待好友消息或向好友發(fā)出消息三 系統(tǒng)開發(fā)目標(biāo)1 實(shí)時(shí)好友登陸 當(dāng)好友登陸或離開聊天室,服務(wù)器端有能力通知所有其他在線用戶。2 收發(fā)消息同步 當(dāng)一用戶向其他的好友發(fā)出消息,發(fā)送接收端的用戶應(yīng)能及時(shí)接收到消息。3 服務(wù)器關(guān)閉通知 當(dāng)服務(wù)器因故障或維護(hù)需要暫時(shí)關(guān)閉,應(yīng)有通知在線用戶的能力。4 隱私消息模式 當(dāng)用戶選擇發(fā)送消息為私聊的模式。其他在線用戶不能看到此條消息。四 系統(tǒng)開發(fā)思路盡量采用公司現(xiàn)有的硬件環(huán)境,及先進(jìn)的管理系統(tǒng)開發(fā)方案,從而達(dá)到充分利用公司現(xiàn)有資源,提高系統(tǒng)開發(fā)水平和應(yīng)用效果的目的。系統(tǒng)應(yīng)符合員工日常的規(guī)定,滿足公司日常工作需要,并達(dá)
29、到操作過(guò)程中的直觀、方便、實(shí)用、安全等要求。系統(tǒng)采用C/S模型。服務(wù)器端和客戶端均使用Visual C+并使用Sockets模型開發(fā)實(shí)現(xiàn)系統(tǒng)采用模塊化程序設(shè)計(jì)方法,既便于系統(tǒng)功能的各種組合和修改,又便于未參與開發(fā)的技術(shù)維護(hù)人員補(bǔ)充和維護(hù)。五 需求的總結(jié)首先,經(jīng)過(guò)和用戶的討論將系統(tǒng)要實(shí)現(xiàn)的功能列出來(lái)。主要模塊有登陸模塊、連接模塊 、發(fā)送消息模塊和接收和處理模塊。其次,對(duì)軟件的性能指標(biāo)的需求。主要有人機(jī)界面交互反應(yīng)時(shí)和運(yùn)行時(shí)間限制在 2 秒之內(nèi),系統(tǒng)啟動(dòng)運(yùn)行不超過(guò) 5 秒,占用內(nèi)存不超過(guò) 20M,外存不超過(guò) 200M(不包括數(shù)據(jù)庫(kù)部分) 。 然后,提出軟件運(yùn)行的環(huán)境需求。該公司的運(yùn)行環(huán)境設(shè)置為:具
30、有 1GB以上的cpu , 128MB的內(nèi)存, 20GB硬盤規(guī)模的服務(wù)器和數(shù)臺(tái)普通可連網(wǎng)微機(jī);軟件采用windows 2000(服務(wù)器)和windows 98以上作為系統(tǒng)和網(wǎng)絡(luò)軟件。該軟件的使用對(duì)象是公司的管理人員,只要會(huì)用一般的微機(jī)操作即可。 從數(shù)據(jù)流和數(shù)據(jù)結(jié)構(gòu)出發(fā),逐步細(xì)化所有的軟件功能,找出系統(tǒng)各元素之間的聯(lián)系,接口特性和設(shè)計(jì)上的限制,分析它們是否滿足功能要求,是否合理。在該系統(tǒng)的分析和綜合中,經(jīng)過(guò)多次與用戶的交流形成了如下所示的各功能模塊圖如下。發(fā)出添加好友消息發(fā)出好友名單消息發(fā)出傳輸數(shù)據(jù)消息發(fā)出用戶重名消息發(fā)出消息接收客戶端退出消息接收傳輸數(shù)據(jù)消息接收連接請(qǐng)求消息接收消息用戶請(qǐng)求連接
31、在線聊天系統(tǒng)服務(wù)器端啟動(dòng)發(fā)出用戶登陸成功消息發(fā)出聊天室關(guān)閉消息發(fā)出好友離開消息發(fā)出添加好友消息發(fā)出好友名單消息發(fā)出傳輸數(shù)據(jù)消息發(fā)出用戶重名消息發(fā)出消息接收客戶端退出消息接收傳輸數(shù)據(jù)消息接收連接請(qǐng)求消息接收消息用戶請(qǐng)求連接在線聊天系統(tǒng)服務(wù)器端啟動(dòng)發(fā)出用戶登陸成功消息發(fā)出聊天室關(guān)閉消息發(fā)出好友離開消息服務(wù)器端系統(tǒng)功能模塊圖接收消息在線聊天系統(tǒng)服務(wù)器端接收客戶端退出消息接收傳輸數(shù)據(jù)消息接收連接請(qǐng)求消息發(fā)出消息發(fā)出好友離開消息發(fā)出聊天室關(guān)閉消息發(fā)出好友名單消息發(fā)出傳輸數(shù)據(jù)消息發(fā)出用戶重名消息發(fā)出用戶登陸成功消息接收消息在線聊天系統(tǒng)服務(wù)器端接收客戶端退出消息接收傳輸數(shù)據(jù)消息接收連接請(qǐng)求消息發(fā)出消息發(fā)出好
32、友離開消息發(fā)出聊天室關(guān)閉消息發(fā)出好友名單消息發(fā)出傳輸數(shù)據(jù)消息發(fā)出用戶重名消息發(fā)出用戶登陸成功消息客戶端系統(tǒng)功能模塊圖第三章 系統(tǒng)具體實(shí)現(xiàn)一 概要設(shè)計(jì)根據(jù)調(diào)查和研究,得到系統(tǒng)所要處理的數(shù)據(jù)可流程,如圖所示:用戶名存在,從新填寫用戶運(yùn)行客戶端端應(yīng)用程序填寫用戶姓名 提交到服務(wù)器用戶名存在,從新填寫用戶運(yùn)行客戶端端應(yīng)用程序填寫用戶姓名 提交到服務(wù)器不存在同名,用戶登陸到聊天室不存在同名,用戶登陸到聊天室 接收服務(wù)器端的在線用戶列表 接收服務(wù)器端的在線用戶列表接收好友消息接收好友下線或登陸消息發(fā)送消息給好友接收好友消息接收好友下線或登陸消息發(fā)送消息給好友客戶端數(shù)據(jù)流圖服務(wù)器端正常啟動(dòng) 等待接收用戶連接
33、信息服務(wù)器端正常啟動(dòng) 等待接收用戶連接信息若消息為用戶登陸,則查看是否后同名用戶登陸 若有,這發(fā)出此用戶已存在消息,否則,發(fā)送登陸成功消息,并發(fā)送在線好友名單,若消息為用戶登陸,則查看是否后同名用戶登陸 若有,這發(fā)出此用戶已存在消息,否則,發(fā)送登陸成功消息,并發(fā)送在線好友名單,并發(fā)送此用戶名稱給已在線用戶若消息為用戶通訊消息,則轉(zhuǎn)發(fā)給該接收的用戶若消息為用戶通訊消息,則轉(zhuǎn)發(fā)給該接收的用戶若消息為用戶退出消息,這斷開連接,同時(shí)發(fā)送其他用戶此用戶退出消息若消息為用戶退出消息,這斷開連接,同時(shí)發(fā)送其他用戶此用戶退出消息服務(wù)器端數(shù)據(jù)流圖二 定義服務(wù)器端和客戶端的通信結(jié)構(gòu)及含義struct CMessa
34、gechar m_strText200;char from20;char to20;int type;結(jié)構(gòu)體的含義定義如下:type定義to20的含義m_strText20含義to20的含義MSG_FIRST用戶請(qǐng)求建立連接方向由客戶端到服務(wù)器端請(qǐng)求建立連接的好友名稱為空為空MSG_SUCCESS建立連接成功方向由服務(wù)器端到客戶端建立成功的好友名稱建立成功的好友名稱為空MSG_MESSAGE好友間傳輸?shù)南⒎?wù)器和客戶端雙向發(fā)出消息的好友名稱默認(rèn)接收消息好友名稱聊天內(nèi)容MSG_USER_ADD添加好友名稱消息方向由服務(wù)器端到客戶端為空添加的好友名稱為空MSG_USER_REMOVE好友離開時(shí)刪
35、除好友名稱方向由服務(wù)器到客戶端為空刪除地的好友名稱為空MSG_QUIT_CLIENT客戶端退出消息方向又客戶端到服務(wù)器端退出的好友名稱為空為空MSG_QUIT_SERVER客戶端退出消息方向又服務(wù)器端到客戶端為空為空為空MSG_RENAME通知用戶此用戶名已存在,應(yīng)更改用戶名再登陸方向又服務(wù)器端到客戶端存在重名的好友名稱空空三 服務(wù)器端具體實(shí)現(xiàn)服務(wù)器端有個(gè)CSocket的派生類CListenSocket對(duì)象指針來(lái)監(jiān)聽端口等待用戶登陸,而用另一個(gè)CSocket的派生類對(duì)象CClientSocket的指針組來(lái)處理和每一個(gè)客戶端的交互過(guò)程。派生類 CListenSocket的回調(diào)函數(shù)OnAccpet
36、()與客戶端建立套接字層次的連接。派生類CClientSocket的回調(diào)函數(shù)OnReceive()與接收每一個(gè)已連接的數(shù)據(jù)傳輸。由于應(yīng)用Visual C+的MFC編程,應(yīng)體現(xiàn)View/Document體系結(jié)構(gòu),所以CListenSocket的OnAccpet和CClientSocket的OnReceive函數(shù)放到應(yīng)用程序的Document的實(shí)現(xiàn)類實(shí)現(xiàn),又由于服務(wù)器端是基于對(duì)話框的應(yīng)用程序,所以以上兩個(gè)函數(shù)的實(shí)際處理代碼再工程的主體類CServerDlg的ProcessPendingAccept和ProcessPendingRead來(lái)處理工程中的cpp文件及其包含的重要函數(shù):ListenSock
37、et.cpp:(CListenSocket的實(shí)現(xiàn)文件)OnAccept(int nErrorCode)ClientSocket.cpp:(CClientSocket的實(shí)現(xiàn)文件)OnReceive(int nErrorCode)ServerDlg.cpp:(CServerDlg的實(shí)現(xiàn)文件) void InsertListAction(CMessage &msg,BOOL bDirection = FALSE);用于更新服務(wù)器端的消息列表。void NotifyName(LPCTSTR lpszText, int i)用于更新服務(wù)器端的在線用戶顯示void OnButtonKick()用于服務(wù)器端
38、的管理員斷開與指定用戶的連接void OnInitDialog()用于初始化主窗體對(duì)話框,并且建立套接字并綁定端口,和一些界面的初始化工作。void ProcessPendingAccept()處理客戶端和服務(wù)器端的連接工作。并將連接的套接字的對(duì)象指針保留到數(shù)組中。void ProcessPendingRead()處理客戶端發(fā)送到服務(wù)器端的數(shù)據(jù)。并對(duì)消息做一定的處理。SendUserNameToClient(CClientSocket *pSocket,CMessage msg)將用戶名稱發(fā)送到指定的套接字對(duì)應(yīng)的用戶UpdateClients(CMessage mmsg, int nBuffe
39、rSize)將mmsg結(jié)構(gòu)發(fā)送給所有用戶,即模擬廣播發(fā)送CPtrList m_connectionList; 連接到客戶端的套接字指針鏈表CListenSocket * m_pSocket; 監(jiān)聽套接字的對(duì)象指針intm_iConnNum;當(dāng)前連接數(shù)CServerDlg:OnInitDialog()m_pSocket = new CListenSocket(this);創(chuàng)建監(jiān)聽套接字m_pSocket-Create(1213);CServerDlg:OnInitDialog()m_pSocket = new CListenSocket(this);創(chuàng)建監(jiān)聽套接字m_pSocket-Create
40、(1213);綁定本地的1213端口m_pSocket-Listen();開始監(jiān)聽m_pSocket = new CListenSocket(this);創(chuàng)建監(jiān)聽套接字m_pSocket-Create(1213);綁定本地的1213端口m_pSocket-Listen();開始監(jiān)聽分析包的內(nèi)容,并查看是否存在同名用戶CServerDlg:ProcessPendRead()接收客戶端包含的WM_FIRST請(qǐng)求構(gòu)造包含MSG_USER_ADD的CMessage對(duì)象,調(diào)用CSocket-Send(),發(fā)送給其他用戶,通知新用戶登陸構(gòu)造包含MSG_USER_ADD的CMessage對(duì)象,調(diào)用CSock
41、et-Send(),發(fā)送給該用戶已進(jìn)入聊天室的好友名單若存在同名構(gòu)造包含MSG_RENAME的CMessage對(duì)象,調(diào)用分析包的內(nèi)容,并查看是否存在同名用戶CServerDlg:ProcessPendRead()接收客戶端包含的WM_FIRST請(qǐng)求構(gòu)造包含MSG_USER_ADD的CMessage對(duì)象,調(diào)用CSocket-Send(),發(fā)送給其他用戶,通知新用戶登陸構(gòu)造包含MSG_USER_ADD的CMessage對(duì)象,調(diào)用CSocket-Send(),發(fā)送給該用戶已進(jìn)入聊天室的好友名單若存在同名構(gòu)造包含MSG_RENAME的CMessage對(duì)象,調(diào)用CSocket:Send(),通知存在重名
42、CServerDlg:ProcessPendAccept()CListenSocket:OnAccpet()客戶端的請(qǐng)求連接若不存在同名 構(gòu)造包含MSG_SUCCESS若不存在同名 構(gòu)造包含MSG_SUCCESS的CMessage對(duì)象,調(diào)用CSocket:Send()通知用戶已建立連接服務(wù)器端具體的建立連接的過(guò)程觸發(fā)退出聊天室退出事件構(gòu)造包含MSG_QUIT_SERVER的CMessage的對(duì)象,用UpdateClients來(lái)使所有連接的客戶端都斷開連接,觸發(fā)退出聊天室退出事件構(gòu)造包含MSG_QUIT_SERVER的CMessage的對(duì)象,用UpdateClients來(lái)使所有連接的客戶端都斷開
43、連接,服務(wù)器退出并通知用戶過(guò)程接收到數(shù)據(jù)包CClientSocket:OnReceive()調(diào)用CServerDlg:ProcessPendRead()來(lái)分析獲得的包的內(nèi)容接收到數(shù)據(jù)包CClientSocket:OnReceive()調(diào)用CServerDlg:ProcessPendRead()來(lái)分析獲得的包的內(nèi)容接收到的包的type為MSG_MESSAGE接收到的包的type為MSG_MESSAGE,則調(diào)用UpdateAllClients來(lái)通知所有用戶構(gòu)造包含MSG_USER_REMOVE的CMessage 對(duì)象,并調(diào)用UpdateClients()來(lái)通知當(dāng)前在線好友好友離開接收到的包的typ
44、e為MSG_QUIT_CLIENT,則將此用戶對(duì)應(yīng)的套接字從套接字鏈表中刪除,并斷開連接服務(wù)器端接收到包含MSG_MESSAGE或MSG_QUIT_CLIENT消息的處理過(guò)程四 客戶端的實(shí)現(xiàn)流圖發(fā)送包含WM_FIRST和用戶名的 CMessage的對(duì)象調(diào)用 CClientSocket的 Connect建立連接添加用戶名稱,調(diào)用CClientDlg:ConnectSocket啟動(dòng)應(yīng)用程序發(fā)送包含WM_FIRST和用戶名的 CMessage的對(duì)象調(diào)用 CClientSocket的 Connect建立連接添加用戶名稱,調(diào)用CClientDlg:ConnectSocket啟動(dòng)應(yīng)用程序CClientSocket:OnReceive()接收到數(shù)據(jù)包客戶端的啟動(dòng)和嘗試建立連接的過(guò)程CClientSocket:OnReceive()接收到數(shù)據(jù)包CclientSocketDoc:ProcessPengingRead()CclientSo
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025ESMO Asia肺癌靶向免疫治療進(jìn)展
- 中學(xué)教師考核評(píng)價(jià)制度
- 養(yǎng)老院入住老人突發(fā)疾病應(yīng)急處理制度
- 企業(yè)員工培訓(xùn)與素質(zhì)發(fā)展路徑制度
- 企業(yè)內(nèi)部溝通與協(xié)調(diào)制度
- 2026河南濮陽(yáng)市市直機(jī)關(guān)遴選公務(wù)員15人參考題庫(kù)附答案
- 2026年及未來(lái)5年市場(chǎng)數(shù)據(jù)中國(guó)水晶蠟燭燈行業(yè)發(fā)展運(yùn)行現(xiàn)狀及發(fā)展趨勢(shì)預(yù)測(cè)報(bào)告
- 2026湖北恩施州恩施市城市社區(qū)黨組織書記實(shí)行事業(yè)崗位管理專項(xiàng)招聘2人備考題庫(kù)附答案
- 2026福建南平市醫(yī)療類儲(chǔ)備人才引進(jìn)10人考試備考題庫(kù)附答案
- 2026福建海峽人才網(wǎng)絡(luò)資訊有限公司前端開發(fā)人員招聘1人考試備考題庫(kù)附答案
- 吉林省戶用光伏施工方案
- 工程部物業(yè)消防知識(shí)培訓(xùn)課件
- 江西省婺源縣聯(lián)考2026屆數(shù)學(xué)七年級(jí)第一學(xué)期期末學(xué)業(yè)水平測(cè)試試題含解析
- 2025至2030水蛭素產(chǎn)品行業(yè)發(fā)展研究與產(chǎn)業(yè)戰(zhàn)略規(guī)劃分析評(píng)估報(bào)告
- 非煤礦山安全員題庫(kù)及答案解析
- 餐飲連鎖加盟店標(biāo)準(zhǔn)運(yùn)營(yíng)手冊(cè)
- 軍人翻墻導(dǎo)致的危害課件
- 園區(qū)運(yùn)營(yíng)年終匯報(bào)
- 數(shù)據(jù)中心設(shè)備采購(gòu)管理實(shí)施計(jì)劃
- (2025年標(biāo)準(zhǔn))公司基地農(nóng)戶協(xié)議書
- 2025時(shí)事政治必考題50題(含答案)
評(píng)論
0/150
提交評(píng)論