在線聊天系統(tǒng)畢業(yè)設(shè)計(jì)論文_第1頁(yè)
在線聊天系統(tǒng)畢業(yè)設(shè)計(jì)論文_第2頁(yè)
在線聊天系統(tǒng)畢業(yè)設(shè)計(jì)論文_第3頁(yè)
在線聊天系統(tǒng)畢業(yè)設(shè)計(jì)論文_第4頁(yè)
在線聊天系統(tǒng)畢業(yè)設(shè)計(jì)論文_第5頁(yè)
已閱讀5頁(yè),還剩29頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、摘 要隨著Internet技術(shù)的飛速發(fā)展,網(wǎng)絡(luò)已經(jīng)成為人們生活中不可缺少的一部分,通過(guò)聊天室在線聊天已成為網(wǎng)絡(luò)上人與人之間溝通、交流和聯(lián)系的一種方式。為此,越來(lái)越多的網(wǎng)站開(kāi)始提供在線聊天的功能。與此同時(shí),聊天室也以其方便、快捷、低成本等優(yōu)勢(shì)受到眾多企業(yè)的青睞,很多企業(yè)的網(wǎng)站中也加入了聊天室模塊,以達(dá)到增進(jìn)企業(yè)與消費(fèi)者之間、消費(fèi)者與消費(fèi)者之間相互交流的目的。本文是軟件工程在線聊天室系統(tǒng)的開(kāi)發(fā)說(shuō)明,重點(diǎn)運(yùn)用軟件工程知識(shí)對(duì)系統(tǒng)進(jìn)行分析、設(shè)計(jì)實(shí)現(xiàn)和測(cè)試的思想的具體描述,其中包括軟件生命周期的三個(gè)主要方面:軟件定義(問(wèn)題定義、可行性研究、需求分析)、軟件開(kāi)發(fā)(總體設(shè)計(jì)、詳細(xì)設(shè)計(jì)、編碼、測(cè)試)和運(yùn)行維護(hù)。

2、通過(guò)實(shí)際的運(yùn)用軟件工程知識(shí)處理問(wèn)題,加強(qiáng)程序的規(guī)范性、清晰性、可靠性,并且使得程序易于維護(hù)。本軟件使用JAVA進(jìn)行編寫(xiě),具有良好的兼容性且易于實(shí)現(xiàn)。聊天室操作簡(jiǎn)潔容易上手、結(jié)構(gòu)簡(jiǎn)單、查找方便、實(shí)用性強(qiáng)。關(guān)鍵字:網(wǎng)絡(luò)、通信、套接字、連接目錄序言.3第一章 VisualC+及Socket套接字介紹.5 一 VisualC+ 介紹.5 二 Socket套接字介紹.6 第二章 軟件需求分析.15 一 系統(tǒng)客戶要求.15 二 系統(tǒng)詳細(xì)設(shè)計(jì).16三 系統(tǒng)開(kāi)發(fā)目標(biāo).17四 系統(tǒng)開(kāi)發(fā)思路.17五 需求總結(jié).18第三章 系統(tǒng)具體實(shí)現(xiàn).21一 概要設(shè)計(jì).21二 定義服務(wù)器端和客戶端的通信結(jié)構(gòu)及含義.22 三 服務(wù)

3、器端的實(shí)現(xiàn)流圖.25四 客戶端的實(shí)現(xiàn)流圖.28第四章 系統(tǒng)測(cè)試 .30第五章 系統(tǒng)運(yùn)行和維護(hù).32第六章 結(jié)束語(yǔ).33參考文獻(xiàn).34序 言隨著現(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)和員工之間的共同能力,實(shí)時(shí)的交流系統(tǒng)就是在這種條件下誕生的。系統(tǒng)開(kāi)發(fā)是一個(gè)十分復(fù)雜的系統(tǒng)工程。這里對(duì)系統(tǒng)開(kāi)發(fā)的基

4、本過(guò)程和方法進(jìn)行介紹,列出相關(guān)文檔的示例并加以說(shuō)明。要提高市場(chǎng)競(jìng)爭(zhēng)力,就要對(duì)市場(chǎng)作充分的調(diào)查和詳細(xì)的研究,同時(shí)也要有好的客戶服務(wù)。企業(yè)要在復(fù)雜的環(huán)境下作出對(duì)策。員工與員工 員工與領(lǐng)導(dǎo)間的即時(shí)交流尤為重要,網(wǎng)絡(luò)在線聊天系統(tǒng)對(duì)于企業(yè)來(lái)說(shuō)就是一種交流和通信的平臺(tái),本系統(tǒng)能夠成為中小型企業(yè)的交流通信的理想平臺(tái)。如能做到信息的及時(shí)的反饋,即時(shí)的處理并作出相應(yīng)的行動(dòng),將能進(jìn)一步提高中小型企業(yè)在現(xiàn)代經(jīng)濟(jì)市場(chǎng)的競(jìng)爭(zhēng)能力。網(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(wǎng)內(nèi)部使用。本應(yīng)用程序使短距離交流更加快捷和便利。更能高效率的體現(xiàn)現(xiàn)代即時(shí)

5、通信的特點(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+開(kāi)發(fā),本系統(tǒng)能夠?yàn)橹行⌒推髽I(yè)協(xié)同工作,相互間的交流提供了有力的工具,運(yùn)用在局域網(wǎng)的本系統(tǒng),能夠?yàn)槠髽I(yè)員工的交流提供幫助,有利于提高工作效率。第一章 VisualC+及Socket套接字介紹一 Visual C 介紹和其他編程工具相比,Visual C+在提供可視化編程方法的同時(shí),適應(yīng)于編寫(xiě)直接對(duì)系統(tǒng)進(jìn)行底層操作的程序.其生成代碼的質(zhì)量,也要優(yōu)于許多其他開(kāi)發(fā)工具.Visual C+所提供的MFC(Microsoft基本類(lèi)庫(kù)),對(duì)Window98/NT/2

6、000所用的Win32 API(應(yīng)用程序接口)進(jìn)行了徹底的封裝,這使得可以使用完全的面向?qū)ο蟮木幊谭椒▉?lái)進(jìn)行Windows程序的開(kāi)發(fā),并能夠大大縮短程序的開(kāi)發(fā)周期,降低開(kāi)發(fā)成本,把Windows程序員從大量復(fù)雜的勞動(dòng)中解放出來(lái).Visual C+給應(yīng)用程序的開(kāi)發(fā)人員提供了豐富的功能,Visual C+通過(guò)MFC庫(kù)提供了一個(gè)完整的應(yīng)用程序的骨架,開(kāi)發(fā)人員可以忽略應(yīng)用程序的入口點(diǎn)和結(jié)束地點(diǎn),并且可以忽略消息在應(yīng)用程序的流動(dòng)順序,通過(guò)MFC的支持Visual C+也提供了Document-View(文檔視圖)的應(yīng)用程序的結(jié)構(gòu),開(kāi)發(fā)人員可以將數(shù)據(jù)保存在Document類(lèi)的對(duì)象上,而在屏幕的顯示的數(shù)據(jù)由

7、View類(lèi)的對(duì)象來(lái)負(fù)責(zé)。通過(guò)MFC的支持Visual C+也實(shí)現(xiàn)了面向?qū)ο箢I(lǐng)域的RTTI(RunTime Type Information 運(yùn)行時(shí)類(lèi)型識(shí)別)、Dynamic Creation(動(dòng)態(tài)創(chuàng)建)、(Persitence)永久保存機(jī)制,同時(shí)他也實(shí)現(xiàn)了Windows下的Message Mapping(消息映射)和Command Routing(命令傳遞),通過(guò)MFC的Cdatabase和Crecordset類(lèi)Visual C+可以實(shí)現(xiàn)數(shù)據(jù)庫(kù)的應(yīng)用,通過(guò)ChtmlStream、CHttpFilter、CHttpFilterContext、ChttpServer等ISAPI(Internet

8、Server API)可以很好的支持Internet上的http協(xié)議相關(guān)的操作。由于MFC涉及到應(yīng)用程序開(kāi)發(fā)的各個(gè)領(lǐng)域,其Visual C+成為倍受歡迎的開(kāi)發(fā)工具。二 Socket套接字介紹Winsock是一套開(kāi)放的,支持多種協(xié)議的Windows下網(wǎng)絡(luò)編程接口,是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è)

9、網(wǎng)絡(luò)間的編程界面.套接字存在于通信域中.通信域是為了處理一般的線程通過(guò)套接字通信而引進(jìn)的一種抽象概念.套接字通過(guò)通常和同一個(gè)域中的套接字交換數(shù)據(jù)(數(shù)據(jù)交換也可能穿越域的界限,但這時(shí)一定要執(zhí)行某種解釋程序).Winsock規(guī)范支持單一的通信域,即Internet域.各種進(jìn)程使用這個(gè)域互相之間用Internet協(xié)議簇來(lái)進(jìn)行通信(Winsock 1.1以上的版本支持其他的域)。套接字可以根據(jù)通信性質(zhì)分類(lèi),這種性質(zhì)對(duì)于用戶時(shí)可見(jiàn)的.應(yīng)用程序一般僅在同一類(lèi)的套接字間通信.不過(guò)只要底層的通信協(xié)議允許,不同類(lèi)型的套接字間也照樣可以通信進(jìn)入九十年代后,隨著計(jì)算機(jī)和網(wǎng)絡(luò)技術(shù)的發(fā)展,很多數(shù)據(jù)處理系統(tǒng)都采用開(kāi)放系統(tǒng)

10、結(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)成這種網(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ī)、異種操

11、作系統(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)行通信,必須要在網(wǎng)絡(luò)的每一端都要建立一個(gè)套接字,兩個(gè)套接字之間是可以建立連接的,也是可以無(wú)連接的,并通過(guò)對(duì)套接字的“讀”、“寫(xiě)”操作實(shí)現(xiàn)網(wǎng)絡(luò)通信功能。類(lèi)似于UNIX系統(tǒng)中的I/O概念,像文件那樣有打開(kāi)、讀、寫(xiě)、關(guān)閉的方式。根據(jù)傳輸數(shù)據(jù)類(lèi)型的不同,套按字可分為面向連接的數(shù)據(jù)套接字(streamsockets)和無(wú)連接的數(shù)據(jù)報(bào)套接字(datagramsock

12、ets)兩種類(lèi)型:(1)字節(jié)流套接字字節(jié)流不按記錄定界,在TCP/IP協(xié)議簇中對(duì)應(yīng)TCP協(xié)議,即傳輸控制協(xié)議(TransmitionControlProtocol)。它是一個(gè)提供給用戶進(jìn)程可靠的全雙工的面向連接的協(xié)議,大多數(shù)INTERNET應(yīng)用程序如ftp、telnet使用TCP協(xié)議。通信端點(diǎn)使用TCP對(duì)應(yīng)的INTERNET地址互相連接,可保證按正確的順序以及單一和可靠的地址傳輸數(shù)據(jù)。由于它是字節(jié)流,所以包長(zhǎng)包沒(méi)有限制,信包傳輸也不重復(fù),因而是一種常用的套接字類(lèi)型。流套接字提供雙向的,有序的,無(wú)重復(fù)并且無(wú)記錄邊界的數(shù)據(jù)流服務(wù),它適應(yīng)于處理大量數(shù)據(jù).網(wǎng)絡(luò)傳輸層可以將數(shù)據(jù)分散或集中到合適尺寸的數(shù)據(jù)

13、包中。流套接字是面向連接的,通信雙方進(jìn)行數(shù)據(jù)交換之前,必須建立一條路徑,這樣即確定了它們之間存在的路徑,又保證了雙方都是活動(dòng)的,可彼此相應(yīng)的,但在通信雙方之間建立一個(gè)通信信道需要很多開(kāi)支.除此以外,大部分面向連接的協(xié)議為保證發(fā)送無(wú)誤,可能會(huì)需要執(zhí)行額外的計(jì)算機(jī)來(lái)驗(yàn)證正確性,為此會(huì)進(jìn)一步增加開(kāi)支。(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é)議快。但不能保證所有數(shù)據(jù)都準(zhǔn)確有序地到達(dá)目的地。不保證順序性、可

14、靠性和無(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)是它保留了記錄邊界。數(shù)據(jù)報(bào)套接字是無(wú)連接的,它不保證接受端是否在監(jiān)聽(tīng),類(lèi)似郵政服務(wù):發(fā)信人把信裝入郵箱即可,至于收信人是否收到這封信或郵局是否會(huì)因?yàn)楸╋L(fēng)雨未能按時(shí)將信件投入收信人處等等,發(fā)信人都不得而知.因此,數(shù)據(jù)報(bào)

15、并不十分可靠,需有程序員負(fù)責(zé)管理數(shù)據(jù)的排序和可靠性)。2套接字的編程要點(diǎn)及過(guò)程不論何種套接字編程,均采用客戶機(jī)/服務(wù)器方式,其運(yùn)作過(guò)程基本類(lèi)似,限于篇幅,這里僅介紹字節(jié)流套接字。字節(jié)流套按字的服務(wù)進(jìn)程和客戶進(jìn)程,在通信前必須創(chuàng)建各自的套接字以建立連接,然后對(duì)相應(yīng)的套接字進(jìn)行“讀”、“寫(xiě)”操作,實(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ò)地址類(lèi)型,一般取AF_INEF(AdressfamilyInterNET);套接字類(lèi)型,這里取SOCK_STREAM;網(wǎng)絡(luò)協(xié)議,缺省為T(mén)CP/IP協(xié)議,

16、對(duì)應(yīng)參數(shù)為0。給套接字地址變量賦初值。在生成套接字后,要用服務(wù)器的地址先對(duì)sockaddr_in結(jié)構(gòu)變量賦初值。sockaddr_in它只適用INTERNET地址類(lèi)型,含有INTERNET套接字地址類(lèi)型、IP端口號(hào)、IP地址等信息。地址類(lèi)型可取定為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)

17、聽(tīng)狀態(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)體變量賦值。地址類(lèi)型仍可取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ù)生

18、成一個(gè)新的字節(jié)流套接字,并返回客戶機(jī)的sockaddr_in結(jié)構(gòu)變量,從而在服務(wù)器應(yīng)用程序中用新的被賦予客戶機(jī)地址的套接字同客戶進(jìn)程進(jìn)行連接,然后向客戶方返回接受信號(hào)。一旦客戶機(jī)的套接字收到來(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ā)送和接收操作,撤銷(xiāo)套接字并中斷連接3 基本概念(1)帶外數(shù)據(jù)帶外數(shù)據(jù),也稱(chēng)為T(mén)CP緊急數(shù)據(jù),它是相連的每一對(duì)流套接字間的一

19、個(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ù)在同一序列發(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)記了允許廣

20、播的套接字中。廣播通常應(yīng)用于以下兩種情況:l 一個(gè)應(yīng)用程序希望在本地網(wǎng)絡(luò)中找到一個(gè)資源。而應(yīng)用程序?qū)υ撡Y源的地址又沒(méi)有任何先驗(yàn)的知識(shí)。l 一些重要功能,例如路由要求把它們的信息發(fā)送給所有可以找到的鄰機(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é)順序被成為“Li

21、ttle-Endian”,它與網(wǎng)絡(luò)的字節(jié)排序順序“Big-Endian”排序順序相反。任何從Winsock函數(shù)對(duì)IP地址和端口號(hào)的引用和傳送給Winsock函數(shù)的IP地址和端口號(hào)均是按照網(wǎng)絡(luò)順序組織的,這也包括了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)就必須在被顯示

22、前從網(wǎng)絡(luò)順序轉(zhuǎn)換到主機(jī)順序。(4)阻塞和非阻塞套接字可以處于阻塞模式或非阻塞模式。調(diào)用任何一個(gè)阻塞模式地函數(shù),都回產(chǎn)生相同地后果-耗費(fèi)或長(zhǎng)或短地時(shí)間等待操作地完成。而當(dāng)套接字處于非阻塞模式時(shí),API函數(shù)的調(diào)用會(huì)立即返回,大多數(shù)情況這些調(diào)用都回“失敗”,并返回一個(gè)WASEWOULDBLOCK的錯(cuò)誤,它意味著請(qǐng)求的操作在調(diào)用期間沒(méi)有時(shí)間完成。Winsock的套接字I/O模型可以幫助應(yīng)用程序判斷一個(gè)套接字何時(shí)可供讀寫(xiě).套接字的行為在Windows 9X 和Windows NT中與在 Windows 3.1中不同.在32位操作系統(tǒng)中,可以采用多線程編程,在不同的線程中使用套接字,這樣即使某個(gè)線程中的套

23、接字被阻塞,也不會(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)都采用開(kāi)放系統(tǒng)結(jié)構(gòu)的客戶機(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ì)稱(chēng)性。客戶機(jī)/服務(wù)器模型工作時(shí)要求有一套為客戶機(jī)和服務(wù)器所共識(shí)的慣例來(lái)保證服務(wù)能夠被提供(或被接受),這一套慣例包含了一套協(xié)議,它必須在通信的兩頭都被實(shí)現(xiàn)。根據(jù)不同的實(shí)際情況,協(xié)議可能是對(duì)稱(chēng)的或非對(duì)稱(chēng)的。在

24、對(duì)稱(chēng)的協(xié)議中每一方都有可能扮演主從角色;在非對(duì)稱(chēng)協(xié)議中一方被不可改變地認(rèn)為是主機(jī),而另一方則是從機(jī)。一個(gè)對(duì)稱(chēng)協(xié)議地例子是Internet中用于終端仿真地Telnet,而非對(duì)稱(chēng)協(xié)議地例子是Internet中的http。無(wú)論具體的協(xié)議是對(duì)稱(chēng)的或是非對(duì)稱(chēng)的,當(dāng)服務(wù)被提供時(shí)必然存在客戶進(jìn)程和服務(wù)進(jìn)程。一個(gè)服務(wù)程序通常在一個(gè)眾所周知地地址監(jiān)聽(tīng)客戶對(duì)服務(wù)地請(qǐng)求,也就是說(shuō),服務(wù)進(jìn)程一直處于休眠狀態(tài),直到一個(gè)客戶對(duì)這個(gè)服務(wù)地址提出連接請(qǐng)求。在這個(gè)時(shí)刻,服務(wù)程序被“驚醒”并且為客戶提供服務(wù)-對(duì)客戶地請(qǐng)求作出適當(dāng)?shù)姆磻?yīng)。這一請(qǐng)求/響應(yīng)的過(guò)程可以簡(jiǎn)單地用以下圖表表示,雖然基于連接地服務(wù)器應(yīng)用程序時(shí)的標(biāo)準(zhǔn),但有時(shí)服務(wù)

25、也可以通過(guò)數(shù)據(jù)報(bào)套接字提供。(6) MFC Windows Socket類(lèi)Visual C+對(duì)眾多的socket函數(shù)進(jìn)行了封裝,MFC提供的封裝類(lèi)是:CAsyncSocket和CSocket類(lèi),它們使編程工作變得相對(duì)簡(jiǎn)單尤其是CSocket類(lèi):l CAsyncSocket類(lèi)所提供的唯一的抽象就是將與套接字相聯(lián)系的Windows消息以回調(diào)函數(shù)的形式表示,因此它帶來(lái)的唯一方便就是程序員無(wú)需自行處理Winsock的I/O模型,而對(duì)于如阻塞處理、字節(jié)順序差異以及Unicode等依然負(fù)有責(zé)任并有靈活的控制權(quán)。l CSocket類(lèi)是CAsyncSocket類(lèi)的派生類(lèi),它提供了對(duì)通過(guò)Carchive對(duì)象使用

26、套接字工作的更高級(jí)抽象。CSocket類(lèi)的使用比CAsynCSocket類(lèi)更加容易,它繼承了CAsyncSocket類(lèi)的許多封裝了API的成員函數(shù),并且管理了通信的大多數(shù)方面,這使得用戶從原來(lái)不得不使用原始API或者CAsyncSocket類(lèi)的煩雜的工作中解脫出來(lái)。更加重要的是CSocket和Carchive類(lèi)提供了對(duì)于同步操作Carchive對(duì)象十分重要的阻塞功能,且CSocket通過(guò)與CSocketFile和Carchive一起使用來(lái)管理對(duì)象數(shù)據(jù)的發(fā)送和接收,使發(fā)送數(shù)據(jù)和操作變得簡(jiǎn)單明了。以下使CSocket對(duì)象與串行化技術(shù)及CSocket類(lèi)的編程模型。第二章 軟件需求分析一 系統(tǒng)客戶要求

27、需求分析是軟件分析中的一個(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)嚅_(kāi),能即時(shí)地接收、處理和發(fā)送接收到的數(shù)據(jù)。能及時(shí)地通知在線用戶當(dāng)前好友在線狀況,能夠處理非正常數(shù)據(jù)的能力。對(duì)于客戶端應(yīng)能夠快速地檢查是否能夠連接到服務(wù)器端。能正確的獲得和反映當(dāng)前好友在線情況。能夠正確的與特定好友交流。能及時(shí)地接收到服務(wù)器端地?cái)?shù)據(jù),并能即時(shí)處理數(shù)據(jù),并能將處理結(jié)果反映給用戶

28、。服務(wù)器端:l 能夠正確地、無(wú)沖突地啟動(dòng)服務(wù)器。l 監(jiān)聽(tīng)指定的端口,等待用戶的連接。l 建立與客戶端的邏輯連接,并能通知其他好友。l 向新進(jìn)入的好友發(fā)出已上線的好友名單。l 接收客戶端的消息請(qǐng)求,并能正確無(wú)誤地處理消息,并能發(fā)出消息到客戶端。l 反映當(dāng)前在線人數(shù)和在線好友狀況。l 及時(shí)地反映發(fā)出地消息和聊天消息。l 當(dāng)好友斷開(kāi)與服務(wù)器端地連接時(shí),服務(wù)器能夠正確地?cái)嚅_(kāi)連接,并通知其他用戶。l 當(dāng)用戶違反聊天系統(tǒng)規(guī)定時(shí),服務(wù)器系統(tǒng)管理員能夠斷開(kāi)與此用戶的連接。l 當(dāng)服務(wù)器關(guān)閉時(shí),應(yīng)通知所有用戶??蛻舳耍簂 能夠正確啟動(dòng)應(yīng)用程序,并能向服務(wù)器發(fā)出連接請(qǐng)求。l 反映當(dāng)前好友在線情況。l 能夠向群體或指

29、定好友發(fā)出消息l 能夠及時(shí)接收好友發(fā)出消息,并通知用戶。l 能夠正確地?cái)嚅_(kā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ò)座談、詢(xún)問(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)用程序用戶名存在,從新填寫(xiě)填寫(xiě)用戶姓名 提交到服務(wù)器不存在同名,用戶登陸到聊天室,等待好友消息或向好友發(fā)出消息三 系統(tǒng)開(kāi)發(fā)目標(biāo)1 實(shí)時(shí)好友登陸 當(dāng)好友登陸或離開(kāi)聊

30、天室,服務(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)開(kāi)發(fā)思路盡量采用公司現(xiàn)有的硬件環(huán)境,及先進(jìn)的管理系統(tǒng)開(kāi)發(fā)方案,從而達(dá)到充分利用公司現(xiàn)有資源,提高系統(tǒng)開(kāi)發(fā)水平和應(yīng)用效果的目的。1. 系統(tǒng)應(yīng)符合員工日常的規(guī)定,滿足公司日常工作需要,并達(dá)到操作過(guò)程中的直觀、方便、實(shí)用、安全等要求。2. 系統(tǒng)采用C/S模型。服務(wù)器端和客戶端均使用Visual C+并使用Sock

31、ets模型開(kāi)發(fā)實(shí)現(xiàn)3. 系統(tǒng)采用模塊化程序設(shè)計(jì)方法,既便于系統(tǒng)功能的各種組合和修改,又便于未參與開(kāi)發(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è)置為:具有 1GB以上的cpu , 128MB的內(nèi)存, 20GB硬盤(pán)規(guī)模的服務(wù)器和數(shù)臺(tái)普通可連網(wǎng)微機(jī);軟件采用windo

32、ws 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)求連接在線聊天系統(tǒng)服務(wù)器端啟動(dòng)發(fā)出用戶登陸成功消息發(fā)出聊天室關(guān)閉消息發(fā)出好友離開(kāi)消息服務(wù)器端系統(tǒng)功能模塊圖接收消息在線

33、聊天系統(tǒng)服務(wù)器端接收客戶端退出消息接收傳輸數(shù)據(jù)消息接收連接請(qǐng)求消息發(fā)出消息發(fā)出好友離開(kāi)消息發(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ù)可流程,如圖所示:用戶名存在,從新填寫(xiě)用戶運(yùn)行客戶端端應(yīng)用程序填寫(xiě)用戶姓名 提交到服務(wù)器不存在同名,用戶登陸到聊天室 接收服務(wù)器端的在線用戶列表接收好友消息接收好友下線或登陸消息發(fā)送消息給好友客戶端數(shù)據(jù)流圖服務(wù)器端正常啟動(dòng) 等待接收用戶連接信息若消息為用戶登陸,則查看是否后同名用戶登陸 若有,這發(fā)出此用戶已存在消息,否則,發(fā)送登陸成

34、功消息,并發(fā)送在線好友名單,并發(fā)送此用戶名稱(chēng)給已在線用戶若消息為用戶通訊消息,則轉(zhuǎn)發(fā)給該接收的用戶若消息為用戶退出消息,這斷開(kāi)連接,同時(shí)發(fā)送其他用戶此用戶退出消息服務(wù)器端數(shù)據(jù)流圖二 定義服務(wù)器端和客戶端的通信結(jié)構(gòu)及含義struct CMessagechar m_strText200;char from20;char to20;int type;結(jié)構(gòu)體的含義定義如下:type定義to20的含義m_strText20含義to20的含義MSG_FIRST用戶請(qǐng)求建立連接方向由客戶端到服務(wù)器端請(qǐng)求建立連接的好友名稱(chēng)為空為空MSG_SUCCESS建立連接成功方向由服務(wù)器端到客戶端建立成功的好友名稱(chēng)建立成

35、功的好友名稱(chēng)為空MSG_MESSAGE好友間傳輸?shù)南⒎?wù)器和客戶端雙向發(fā)出消息的好友名稱(chēng)默認(rèn)接收消息好友名稱(chēng)聊天內(nèi)容MSG_USER_ADD添加好友名稱(chēng)消息方向由服務(wù)器端到客戶端為空添加的好友名稱(chēng)為空MSG_USER_REMOVE好友離開(kāi)時(shí)刪除好友名稱(chēng)方向由服務(wù)器到客戶端為空刪除地的好友名稱(chēng)為空MSG_QUIT_CLIENT客戶端退出消息方向又客戶端到服務(wù)器端退出的好友名稱(chēng)為空為空MSG_QUIT_SERVER客戶端退出消息方向又服務(wù)器端到客戶端為空為空為空MSG_RENAME通知用戶此用戶名已存在,應(yīng)更改用戶名再登陸方向又服務(wù)器端到客戶端存在重名的好友名稱(chēng)空空三 服務(wù)器端具體實(shí)現(xiàn)服務(wù)器端有

36、個(gè)CSocket的派生類(lèi)CListenSocket對(duì)象指針來(lái)監(jiān)聽(tīng)端口等待用戶登陸,而用另一個(gè)CSocket的派生類(lèi)對(duì)象CClientSocket的指針組來(lái)處理和每一個(gè)客戶端的交互過(guò)程。派生類(lèi) CListenSocket的回調(diào)函數(shù)OnAccpet()與客戶端建立套接字層次的連接。派生類(lèi)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)類(lèi)實(shí)現(xiàn),又

37、由于服務(wù)器端是基于對(duì)話框的應(yīng)用程序,所以以上兩個(gè)函數(shù)的實(shí)際處理代碼再工程的主體類(lèi)CServerDlg的ProcessPendingAccept和ProcessPendingRead來(lái)處理工程中的cpp文件及其包含的重要函數(shù):ListenSocket.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 &a

38、mp;msg,BOOL bDirection = FALSE);用于更新服務(wù)器端的消息列表。void NotifyName(LPCTSTR lpszText, int i)用于更新服務(wù)器端的在線用戶顯示void OnButtonKick()用于服務(wù)器端的管理員斷開(kāi)與指定用戶的連接void OnInitDialog()用于初始化主窗體對(duì)話框,并且建立套接字并綁定端口,和一些界面的初始化工作。void ProcessPendingAccept()處理客戶端和服務(wù)器端的連接工作。并將連接的套接字的對(duì)象指針保留到數(shù)組中。void ProcessPendingRead()處理客戶端發(fā)送到服務(wù)器端的數(shù)據(jù)。

39、并對(duì)消息做一定的處理。SendUserNameToClient(CClientSocket *pSocket,CMessage msg)將用戶名稱(chēng)發(fā)送到指定的套接字對(duì)應(yīng)的用戶UpdateClients(CMessage mmsg, int nBufferSize)將mmsg結(jié)構(gòu)發(fā)送給所有用戶,即模擬廣播發(fā)送CPtrList m_connectionList; 連接到客戶端的套接字指針鏈表CListenSocket * m_pSocket; 監(jiān)聽(tīng)套接字的對(duì)象指針intm_iConnNum;當(dāng)前連接數(shù)CServerDlg:OnInitDialog()m_pSocket = new CListenS

40、ocket(this);創(chuàng)建監(jiān)聽(tīng)套接字m_pSocket->Create(1213);綁定本地的1213端口m_pSocket->Listen();開(kāi)始監(jiān)聽(tīng)m_pSocket = new CListenSocket(this);創(chuàng)建監(jiān)聽(tīng)套接字m_pSocket->Create(1213);綁定本地的1213端口m_pSocket->Listen();開(kāi)始監(jiān)聽(tīng)分析包的內(nèi)容,并查看是否存在同名用戶CServerDlg:ProcessPendRead()接收客戶端包含的WM_FIRST請(qǐng)求構(gòu)造包含MSG_USER_ADD的CMessage對(duì)象,調(diào)用CSocket->Se

41、nd(),發(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(),通知存在重名CServerDlg:ProcessPendAccept()CListenSocket:OnAccpet()客戶端的請(qǐng)求連接若不存在同名 構(gòu)造包含MSG_SUCCESS的CMessage對(duì)象,調(diào)用CSocket:Send()通知用戶已建立連接服務(wù)器端具體的建立連接的過(guò)程觸發(fā)退出聊天室退出事件構(gòu)造包含MSG_QUIT_S

42、ERVER的CMessage的對(duì)象,用UpdateClients來(lái)使所有連接的客戶端都斷開(kāi)連接,服務(wù)器退出并通知用戶過(guò)程接收到數(shù)據(jù)包CClientSocket:OnReceive()調(diào)用CServerDlg:ProcessPendRead()來(lái)分析獲得的包的內(nèi)容接收到的包的type為MSG_MESSAGE,則調(diào)用UpdateAllClients來(lái)通知所有用戶構(gòu)造包含MSG_USER_REMOVE的CMessage 對(duì)象,并調(diào)用UpdateClients()來(lái)通知當(dāng)前在線好友好友離開(kāi)接收到的包的type為MSG_QUIT_CLIENT,則將此用戶對(duì)應(yīng)的套接字從套接字鏈表中刪除,并斷開(kāi)連接服務(wù)器端

43、接收到包含MSG_MESSAGE或MSG_QUIT_CLIENT消息的處理過(guò)程四 客戶端的實(shí)現(xiàn)流圖發(fā)送包含WM_FIRST和用戶名的 CMessage的對(duì)象調(diào)用 CClientSocket的 Connect建立連接添加用戶名稱(chēng),調(diào)用CClientDlg:ConnectSocket啟動(dòng)應(yīng)用程序CClientSocket:OnReceive()接收到數(shù)據(jù)包客戶端的啟動(dòng)和嘗試建立連接的過(guò)程CclientSocketDoc:ProcessPengingRead()包的標(biāo)志位為MSG_MESSAGE,則處理好友的消息,并顯示包的標(biāo)志位位MSG_RENAME標(biāo)記此用戶名稱(chēng)已被使用,包的標(biāo)志為MSG_SUCCESS,標(biāo)記者進(jìn)入聊天室成功包的標(biāo)志位為MSG_USER_REMOVE,則將好友名稱(chēng)從好友列表中刪除包的標(biāo)志位為MSG_USER_ADD,添加用戶到好友列表包的標(biāo)志位為MSG_QUIT_SE

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論