網(wǎng)絡(luò)多人聊天系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)【畢業(yè)論文】_第1頁(yè)
已閱讀1頁(yè),還剩42頁(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、<p><b>  本科畢業(yè)設(shè)計(jì)</b></p><p><b> ?。?0 屆)</b></p><p>  網(wǎng)絡(luò)多人聊天系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)</p><p>  所在學(xué)院 </p><p>  專業(yè)班級(jí) 通信工程

2、 </p><p>  學(xué)生姓名 學(xué)號(hào) </p><p>  指導(dǎo)教師 職稱 </p><p>  完成日期 年 月 </p><p><b>  摘 要</b>&l

3、t;/p><p>  網(wǎng)絡(luò)多人聊天系統(tǒng),屬于即時(shí)通訊的范疇,是一種能為多人提供即時(shí)交流的聊天平臺(tái)。</p><p>  網(wǎng)上聊天系統(tǒng)作為一種方便人與人之間聯(lián)系的實(shí)用系統(tǒng),為我們的生活和學(xué)習(xí)帶來(lái)了極大的方便,也提高了工作的效率。目前人們交流方式多種多樣,聊天軟件憑其友好的外觀、使用的便利等特點(diǎn)博得現(xiàn)代人的青睞。</p><p>  本畢業(yè)設(shè)計(jì)論文介紹以C++語(yǔ)言設(shè)計(jì)和實(shí)現(xiàn)

4、一個(gè)網(wǎng)絡(luò)聊天系統(tǒng)的過(guò)程。本系統(tǒng)采用C/S架構(gòu)設(shè)計(jì),程序主要分為兩部分:客戶端和服務(wù)器端。客戶端會(huì)顯示在線的所有成員,服務(wù)器提供成員之間的私聊以及群聊功能。程序界面簡(jiǎn)潔,布局合理,操作方便。利用Socket網(wǎng)絡(luò)開發(fā)技術(shù)實(shí)現(xiàn)客戶端和服務(wù)器端的連接訪問(wèn),實(shí)現(xiàn)網(wǎng)絡(luò)功能;通過(guò)對(duì)數(shù)據(jù)流操作的合理設(shè)計(jì),實(shí)現(xiàn)信息傳遞、接受和數(shù)據(jù)保存。同時(shí),采用多線程、多任務(wù)的設(shè)計(jì)思想,開發(fā)出性能穩(wěn)定的服務(wù)器。完整地實(shí)現(xiàn)系統(tǒng)的功能。</p><p&g

5、t;  關(guān)鍵字:聊天系統(tǒng);C++ Builder;Socket</p><p><b>  Abstract</b></p><p>  Network multiplayer chat system, belonging to the scope of Instant Messaging, is a kind of communication platform fo

6、r providing people to instant chat.</p><p>  Network chat system as a practical system make the communication between people more convenient and make our living and learning more convenient, also improve wor

7、k efficiency. Presently, there are many ways for people communicate, chatting software, relying on it’s friendly appearance, ease of use and so won the favor of the modern human.</p><p>  This graduation the

8、sis of design introduction how to use the C++ language design and carry out network chat room, the system adoption the C/ S structure design, the entire project is divided into client and server, the program interface is

9、 simple, reasonable layout and convenient operation. The client will show all the members online, the server private chat between two members and a group chat. We make use of the Socket technology to interconnect the ser

10、ver and client by net-work ;organize the </p><p>  Keywords:Chat;C++ Builder;Socket</p><p><b>  目 錄</b></p><p>  1 引言- 1 -</p><p>  1.1 課題的來(lái)源- 1 -</p&

11、gt;<p>  1.2 本課題的目的、內(nèi)容、要求- 1 -</p><p>  1.2.1 目的- 1 -</p><p>  1.2.2 內(nèi)容- 2 -</p><p>  1.2.3 要求- 2 -</p><p>  2 系統(tǒng)的開發(fā)和運(yùn)行環(huán)境- 3 -</p><p>  2.1 C++

12、 Builder6簡(jiǎn)介- 3 -</p><p>  2.2 開發(fā)技術(shù)的選擇- 3 -</p><p>  3 需求分析- 5 -</p><p>  3.1 項(xiàng)目概述- 5 -</p><p>  3.1.1 產(chǎn)品描述- 5 -</p><p>  3.1.2 產(chǎn)品功能- 5 -</p>&

13、lt;p>  3.2 功能需求- 7 -</p><p>  3.2.1 用戶登錄- 7 -</p><p>  3.2.2 公聊- 7 -</p><p>  3.2.3 私聊- 7 -</p><p>  3.2.4 聊天記錄- 8 -</p><p>  3.2.5 用戶注銷- 8 -</

14、p><p>  3.3 質(zhì)量性能需求- 9 -</p><p>  3.3.1 容錯(cuò)性需求- 9 -</p><p>  3.3.2 穩(wěn)定性需求- 9 -</p><p>  3.3.3 軟件設(shè)計(jì)可靠性- 9 -</p><p>  3.3.4 安全性- 9 -</p><p>  3.3

15、.5 擴(kuò)展性- 9 -</p><p>  3.3.6 易用性- 9 -</p><p>  4 概要設(shè)計(jì)- 10 -</p><p>  4.1 目的- 10 -</p><p>  4.2 運(yùn)行環(huán)境- 10 -</p><p>  4.3 條件與限制- 10 -</p><p>

16、  4.4 網(wǎng)上信息傳播模式- 10 -</p><p>  4.5 C++ Builder中常用的Socket控件- 11 -</p><p>  4.6 程序體系結(jié)構(gòu)- 11 -</p><p>  5 詳細(xì)設(shè)計(jì)- 12 -</p><p>  5.1 設(shè)計(jì)流程- 12 -</p><p>  5.1.1

17、 客戶端與服務(wù)器端之間傳遞的主要消息- 12 -</p><p>  5.1.2 服務(wù)器端程序設(shè)計(jì)流程- 12 -</p><p>  5.1.3 客戶端程序設(shè)計(jì)流程- 13 -</p><p>  5.2 服務(wù)器端程序模塊- 13 -</p><p>  5.2.1 建立連接程序模塊- 13 -</p><p&

18、gt;  5.2.2 服務(wù)器監(jiān)聽模塊- 16 -</p><p>  5.2.3 服務(wù)器端讀取及發(fā)送信息模塊- 19 -</p><p>  5.2.4 斷開連接模塊- 22 -</p><p>  5.3 客戶端程序模塊- 23 -</p><p>  5.3.1 建立連接程序模塊- 23 -</p><p&g

19、t;  5.3.2 輸入交談信息模塊- 26 -</p><p>  5.3.3 客戶端讀取及發(fā)送信息模塊- 27 -</p><p>  5.3.4 斷開連接模塊- 28 -</p><p>  6 系統(tǒng)測(cè)試- 30 -</p><p>  7 結(jié)論- 36 -</p><p>  致 謝錯(cuò)誤!未定義書

20、簽。</p><p>  參考文獻(xiàn)- 37 -</p><p><b>  1 引言</b></p><p><b>  1.1 課題的來(lái)源</b></p><p>  信息化是目前世界發(fā)展的局勢(shì),是推動(dòng)經(jīng)濟(jì)社會(huì)變革的重要力量。大力推進(jìn)信息化,是覆蓋我國(guó)現(xiàn)代化建設(shè)全局的戰(zhàn)略舉措,是貫徹落實(shí)科學(xué)發(fā)展

21、觀、全面建設(shè)小康社會(huì)、構(gòu)建社會(huì)主義和諧社會(huì)和建設(shè)創(chuàng)新型國(guó)家的迫切需求和必然選擇。</p><p>  而作為信息傳遞的一個(gè)重要平臺(tái),互聯(lián)網(wǎng)扮演著舉足輕重的角色。網(wǎng)絡(luò)聊天工具,作為一種方便、即時(shí)的信息交流方式,漸漸地受到越來(lái)越多人的青睞。同時(shí),各種各樣的網(wǎng)絡(luò)聊天服務(wù)程序也大量出現(xiàn),比較著名的有NetMeeting、OICQ、ICQ、MSN-Messenger,以及國(guó)內(nèi)最流行的騰訊QQ等[1]。騰訊無(wú)疑是國(guó)內(nèi)即時(shí)通訊

22、市場(chǎng)的霸主,自從99年進(jìn)入即時(shí)通訊領(lǐng)域并迅速占市場(chǎng)之后,其在國(guó)內(nèi)用戶數(shù)量始終高居榜首,即使近幾年面對(duì)微軟MSN的強(qiáng)大攻勢(shì),騰訊QQ的時(shí)常占有率依然穩(wěn)步增長(zhǎng)。騰訊的成功與其對(duì)QQ的不斷創(chuàng)新和完善是分不開的。</p><p>  網(wǎng)絡(luò)聊天室也是屬于即時(shí)通信軟件的范疇,在網(wǎng)絡(luò)應(yīng)用中出現(xiàn)的較早。網(wǎng)絡(luò)聊天室以其特有的多人即時(shí)聊天方式被大家喜歡,很多時(shí)候能給使用者們?cè)诠ぷ骰驅(qū)W習(xí)中帶來(lái)更高的效率。其開發(fā)技術(shù)和設(shè)計(jì)思想都已經(jīng)得到

23、成熟的發(fā)展,并且已經(jīng)具有許多成功的案例[2]。在開發(fā)技術(shù)上已經(jīng)沒有什么技術(shù)難題,并且具有廣泛的應(yīng)用和市場(chǎng)空間。目前,國(guó)內(nèi)各大門戶網(wǎng)站都架設(shè)了大型聊天室。如:新浪聊天室、中華網(wǎng)社區(qū)聊天室、搜狐等都成為網(wǎng)民們的熱門聊天室。</p><p>  1.2 本課題的目的、內(nèi)容、要求</p><p><b>  1.2.1 目的</b></p><p> 

24、 網(wǎng)絡(luò)聊天室是一項(xiàng)應(yīng)用廣泛,并且實(shí)用性強(qiáng)的一個(gè)應(yīng)用,雖然其功能簡(jiǎn)單,但是在其開發(fā)技術(shù)和過(guò)程中,能夠充分學(xué)習(xí)和使用C++的技術(shù),開發(fā)各界面,包括登入、注冊(cè)、注銷、公聊、私聊等界面;實(shí)現(xiàn)網(wǎng)絡(luò)的功能使用,包括通信協(xié)議、網(wǎng)絡(luò)端口等[3]。并且在開發(fā)過(guò)程當(dāng)中,能充分的使用和體會(huì)面向?qū)ο蠹夹g(shù)的原理和方法。</p><p>  所以該項(xiàng)目可以使自己在C++技術(shù)方面得到全面應(yīng)用,使自己項(xiàng)目開發(fā)能力的一個(gè)很好體現(xiàn)。</p&g

25、t;<p><b>  1.2.2 內(nèi)容</b></p><p>  一個(gè)網(wǎng)絡(luò)多人聊天室,必須有一個(gè)穩(wěn)定的服務(wù)器,以及客戶的的登錄端。</p><p>  客服端要具有用戶連接、登錄等功能,在登入成功后,要顯示出公聊界面,在新用戶上線和用戶下線時(shí)要更新每個(gè)客戶端在線用戶列表名,并且可以和在線的用戶實(shí)現(xiàn)一對(duì)一的私聊功能。</p><p&

26、gt;  在服務(wù)器端實(shí)現(xiàn)不斷的監(jiān)聽客戶的連接,并且根據(jù)客戶端發(fā)送過(guò)來(lái)的不同信息,如登入信息、公聊信息、私聊信息、退出信息等,服務(wù)器端要作出不同的響應(yīng)。</p><p><b>  1.2.3 要求</b></p><p>  利用TServerSocket和TClientSocket兩個(gè)控件,創(chuàng)建網(wǎng)上多用戶聊天的程序,創(chuàng)建的應(yīng)用程序?qū)崿F(xiàn)了目前市場(chǎng)上一些商用對(duì)話程序的大

27、部分功能,如廣播和對(duì)多個(gè)用戶選擇性發(fā)送消息、允許用戶選擇自己喜歡的服務(wù)器等。在代碼的編寫上要充分體現(xiàn)C++面向?qū)ο箝_發(fā)思想和多態(tài)性,提高代碼的重用性和高效性。</p><p>  2 系統(tǒng)的開發(fā)和運(yùn)行環(huán)境</p><p>  2.1 C++ Builder6簡(jiǎn)介</p><p>  Borland 公司在推出 DOS環(huán)境下的C語(yǔ)言編譯器 Turbo C 及Turbo

28、 C++后成為第二個(gè)在PC領(lǐng)域推出商業(yè)化C++的編譯器廠商。現(xiàn)今的Borland C++ Builder 是一種快速應(yīng)用程序開發(fā)(RAD,Rapid Application Development)工具,基于面向?qū)ο蟮腃++語(yǔ)言??梢哉f(shuō),C++ Builder是集C++語(yǔ)言的高效性和RAD開發(fā)工具的快速性等優(yōu)點(diǎn)完美結(jié)合的產(chǎn)物,也是基于Pascal 程序設(shè)計(jì)語(yǔ)言的Delphi強(qiáng)大功能的合理擴(kuò)展。用戶可以利用C++ Builder 提供的I

29、DE(Integrated Development Environment)開發(fā)環(huán)境來(lái)幫助完成整個(gè)應(yīng)用程序的設(shè)計(jì),而不需要再依靠其他工具,以便使程序開發(fā)環(huán)境能夠簡(jiǎn)單一致,提高整體的工程開發(fā)效率??傊珻++ Builder 是一種全新的軟件開發(fā)工具,它的優(yōu)點(diǎn)是不言而喻的。</p><p>  2.2 開發(fā)技術(shù)的選擇</p><p>  本課題用TServerSocket控件處理客戶端發(fā)來(lái)的

30、socket連接。Active屬性決定程序運(yùn)行后,該組件是否馬上啟動(dòng)服務(wù)器套接字進(jìn)行監(jiān)聽。ServiceType決定了與服務(wù)器的鏈接是非阻塞還是為每個(gè)連接創(chuàng)建一個(gè)線程。Service屬性決定了該服務(wù)器組件提供什么服務(wù)。常見的服務(wù)有FTP、WWW、SMTP、HTTP等,不過(guò)設(shè)置了端口屬性,就不需要設(shè)置此屬性了。</p><p>  TClientSocket控件是一個(gè)簡(jiǎn)單的套接字(socket)組件,使用這個(gè)控件可

31、以實(shí)現(xiàn)與服務(wù)器建立連接并完成簡(jiǎn)單的套接字通信。除此之外,使用此控件還可以按照流的方式發(fā)送數(shù)據(jù)給服務(wù)器,輕松地完成表中數(shù)據(jù)的傳送。</p><p>  Socket是一種用于表達(dá)兩臺(tái)機(jī)器之間連接“終端”的軟件抽象。對(duì)于一個(gè)給定的連接,在每臺(tái)機(jī)器上都有一個(gè)Socket,可以想象一個(gè)虛擬的"電纜"工作在兩臺(tái)機(jī)器之間,“電纜”插在兩臺(tái)機(jī)器的Socket上[4]。</p><p>

32、;  簡(jiǎn)單的說(shuō),一臺(tái)計(jì)算機(jī)上的socket同另一臺(tái)計(jì)算機(jī)通話創(chuàng)建一個(gè)通信信道,程序員可以用這個(gè)信道在兩臺(tái)機(jī)器之間發(fā)送數(shù)據(jù)。當(dāng)你發(fā)送數(shù)據(jù)時(shí),TCP/IP協(xié)議棧的每一層都給你的數(shù)據(jù)里添加適當(dāng)?shù)膱?bào)頭。socket像電話聽筒一樣在電話的任意一端,兩人通過(guò)一個(gè)專門的信道來(lái)進(jìn)行通話和接聽。會(huì)話將一直進(jìn)行下去直到兩人決定掛斷電話,否則各自的電話線路都會(huì)占線[4]。</p><p>  TCP和UDP扮演同樣的角色,但是實(shí)現(xiàn)是不

33、同的。兩者都接收傳輸協(xié)議數(shù)據(jù)包并把它們傳遞到表示層。TCP把信息分解成數(shù)據(jù)包(datagrams)并在接收端重新組裝起來(lái)。它還對(duì)丟失的數(shù)據(jù)包進(jìn)行重新傳輸?shù)恼?qǐng)求。TCP減少了上層的擔(dān)憂。UDP沒有組裝和重傳請(qǐng)求的功能。它只是傳輸數(shù)據(jù)包。更高層的層必須確保信息的完整性以及組合順序的正確性。</p><p><b>  3 需求分析</b></p><p><b>

34、;  3.1 項(xiàng)目概述</b></p><p>  3.1.1 產(chǎn)品描述</p><p>  一個(gè)操作簡(jiǎn)單、界面友好、運(yùn)行穩(wěn)定的網(wǎng)絡(luò)聊天室對(duì)于小型局域網(wǎng)內(nèi)的用戶可以起到很好的交流作用。本聊天室是一個(gè)可以讓許多用戶同時(shí)互相通信的網(wǎng)上園地,個(gè)人用戶可以通過(guò)網(wǎng)上聊天室將自己融入整個(gè)主流社會(huì)中。由于目前上網(wǎng)的一般都是具有高學(xué)歷的新一代創(chuàng)業(yè)者,因此,在網(wǎng)上聊天室這個(gè)虛擬的社會(huì)中,可以結(jié)交

35、各層次各地方的朋友,從而為自己獲取更多的知識(shí)和更多的閱歷。人們?nèi)粘I钪性絹?lái)越多地使用這項(xiàng)新的技術(shù)來(lái)為自己的工作和學(xué)習(xí)服務(wù)。</p><p>  該聊天室是為許多喜愛上網(wǎng)聊天的朋友開發(fā)設(shè)計(jì)的,希望能在現(xiàn)有的眾多聊天室中給大家多一種的選擇。和許多大型的網(wǎng)絡(luò)聊天室相比該聊天室比較簡(jiǎn)單,但能實(shí)現(xiàn)聊天的基本功能,點(diǎn)對(duì)多聊天,點(diǎn)對(duì)點(diǎn)聊天等,基于時(shí)間和技術(shù)的原因,很遺憾傳送文件的功能尚未實(shí)現(xiàn)。本聊天室主要由登錄界面、聊天室界

36、面、私聊界面、查看聊天內(nèi)容界面等構(gòu)成。整個(gè)設(shè)計(jì)簡(jiǎn)潔明了、實(shí)用,使用簡(jiǎn)單。</p><p>  3.1.2 產(chǎn)品功能</p><p>  本項(xiàng)目具有以下主要功能</p><p><b>  客戶端:</b></p><p>  1 用戶登錄功能,實(shí)現(xiàn)用戶登錄服務(wù)器,自定義昵稱。</p><p> 

37、 2 群聊功能,實(shí)現(xiàn)用戶與在線所有成員聊天方式。</p><p>  3 私聊功能,實(shí)現(xiàn)用戶與在線成員一對(duì)一的聊天方式。</p><p>  4 查看聊天記錄,實(shí)現(xiàn)用戶查看歷史聊天內(nèi)容。</p><p><b>  服務(wù)端:</b></p><p>  1 可以不斷地監(jiān)聽來(lái)自客戶端的連接請(qǐng)求</p>

38、<p>  2 顯示用戶的登錄信息</p><p>  3 顯示用戶的注銷信息</p><p>  根據(jù)上述功能,得到如圖3-1的系統(tǒng)功能模塊圖。</p><p>  圖3-1 網(wǎng)絡(luò)多人聊天系統(tǒng)功能模塊圖</p><p><b>  3.2 功能需求</b></p><p>  

39、3.2.1 用戶登錄</p><p>  需求描述:用戶填寫主機(jī)名和昵稱,進(jìn)入聊天室主界面</p><p><b>  執(zhí)行者:用戶</b></p><p><b>  前置條件:無(wú)</b></p><p><b>  后置條件:無(wú)</b></p><p&g

40、t;<b>  正常過(guò)程:</b></p><p>  1 向服務(wù)器發(fā)送連接請(qǐng)求。</p><p>  2 返回客戶端一個(gè)響應(yīng),提示登錄成功,彈出聊天界面。</p><p>  3 刷新其他在線用戶的用戶列表信息。</p><p><b>  3.2.2 公聊</b></p>&

41、lt;p>  需求描述:用戶在聊天室公聊界面的發(fā)言內(nèi)容,聊天室中的其他在線用戶可以正常接受并正確顯示(包括發(fā)送的表情和用戶設(shè)置的字體顏色)。</p><p><b>  執(zhí)行者:登入用戶</b></p><p>  前置條件:用戶登錄成功</p><p><b>  后置條件:無(wú)</b></p><

42、;p><b>  正常過(guò)程:</b></p><p>  1 客戶端用戶登入成功后,啟動(dòng)客戶端功能線程。</p><p>  2 客戶端將用戶發(fā)送的信息打包傳送給服務(wù)端。</p><p>  3 服務(wù)端進(jìn)行數(shù)據(jù)分析后,并將用戶的信息進(jìn)行正確的處理。</p><p>  4 傳給處在聊天室的所有在線其他用戶并

43、正常顯示。</p><p><b>  3.2.3 私聊</b></p><p>  需求描述:用戶可選擇聊天室的在線用戶列表中其他用戶聊天。并且對(duì)方有消息提示,雙方發(fā)送的信息對(duì)于聊天室的其他用戶是不可見的。</p><p><b>  執(zhí)行者:用戶</b></p><p>  前置條件:用戶登錄成

44、功,私聊的對(duì)方在線</p><p><b>  后置條件:無(wú)</b></p><p><b>  正常過(guò)程:</b></p><p>  1 客戶端與服務(wù)端建立通訊。</p><p>  2 客戶端將用戶發(fā)送的信息打包傳送給服務(wù)端。</p><p>  3 服務(wù)端進(jìn)行數(shù)

45、據(jù)分析,將用戶的信息傳給目的用戶。</p><p>  4 目的用戶收到服務(wù)器的信息后,正確的顯示并保存。</p><p>  3.2.4 聊天記錄</p><p>  需求描述:用戶可以查詢聊天的歷史紀(jì)錄,包括公聊記錄和私聊記錄。</p><p><b>  執(zhí)行者:用戶</b></p><p&g

46、t;  前置條件:用戶正確登入后</p><p><b>  后置條件:無(wú)</b></p><p><b>  正常過(guò)程:</b></p><p>  1 發(fā)送、接收信息的同時(shí)將信息保存在本地文件中。</p><p>  2 信息發(fā)送框中可以查詢歷史聊天記錄。</p><p&

47、gt;  3 從本地文件中讀取信息,并顯示在記錄顯示匡中。</p><p>  3.2.5 用戶注銷</p><p>  需求描述:用戶在正常情況下退出聊天室。</p><p><b>  執(zhí)行者:用戶</b></p><p>  前置條件:用戶成功登錄聊天室</p><p><b>

48、  后置條件:無(wú)</b></p><p><b>  正常過(guò)程:</b></p><p>  1 向服務(wù)器發(fā)送用戶登出消息。</p><p>  2 服務(wù)器進(jìn)行用戶退出的數(shù)據(jù)處理。</p><p>  3 服務(wù)器向聊天室其他用戶發(fā)送登出消息。</p><p>  3.3 質(zhì)量性能

49、需求</p><p>  3.3.1 容錯(cuò)性需求</p><p>  當(dāng)出現(xiàn)代碼異常時(shí),出現(xiàn)正確的提示,不會(huì)影響整個(gè)系統(tǒng)的運(yùn)行。用戶之間信息傳輸不會(huì)因?yàn)閿?shù)據(jù)封裝問(wèn)題出現(xiàn)丟失或亂碼。因用戶的誤操作產(chǎn)生的異常應(yīng)做出及時(shí)的處理或信息提示。</p><p>  3.3.2 穩(wěn)定性需求</p><p>  軟件應(yīng)正常完成所有功能需求。服務(wù)器端應(yīng)長(zhǎng)時(shí)間運(yùn)

50、行無(wú)故障,故障修復(fù)時(shí)間一般控制在3小時(shí)內(nèi),除非出現(xiàn)惡性攻擊、病毒破壞、系統(tǒng)資源不足、硬件故障、操作系統(tǒng)或數(shù)據(jù)庫(kù)系統(tǒng)崩潰網(wǎng)絡(luò)中斷等情況,要求系統(tǒng)連續(xù)運(yùn)行一周,不允許出現(xiàn)內(nèi)存泄露。要求系統(tǒng)可以承受告警風(fēng)暴和大數(shù)據(jù)量的沖擊,不出現(xiàn)內(nèi)存溢出等現(xiàn)象。</p><p>  3.3.3 軟件設(shè)計(jì)可靠性</p><p>  要確定合適的模塊粒度,各模塊之間要求松耦合,高內(nèi)聚;從而使整個(gè)系統(tǒng)的可靠性和穩(wěn)定性

51、得到提高,并且便于系統(tǒng)維護(hù),和新模塊的添加。</p><p><b>  3.3.4 安全性</b></p><p>  安全性是防止網(wǎng)絡(luò)方面的攻擊</p><p><b>  3.3.5 擴(kuò)展性</b></p><p>  系統(tǒng)建成后,應(yīng)在現(xiàn)行系統(tǒng)上不需要做大的改動(dòng)或不影響整個(gè)系統(tǒng)結(jié)構(gòu),就可以增加

52、功能模塊,這就必須在系統(tǒng)設(shè)計(jì)時(shí)留有接口,使其具有可擴(kuò)展性和維護(hù)性。</p><p><b>  3.3.6 易用性</b></p><p>  系統(tǒng)操作的界面必須簡(jiǎn)潔、操作方便易用、設(shè)計(jì)合理</p><p><b>  4 概要設(shè)計(jì)</b></p><p><b>  4.1 目的<

53、/b></p><p>  該階段目的在于明確網(wǎng)絡(luò)聊天室系統(tǒng)的軟件總體結(jié)構(gòu),各個(gè)軟件模塊的功能說(shuō)明,系統(tǒng)運(yùn)行配置與應(yīng)用方式以及使用的關(guān)鍵技術(shù)。</p><p><b>  4.2 運(yùn)行環(huán)境</b></p><p>  系統(tǒng)的開發(fā)環(huán)境為C++ Builder6,測(cè)試和運(yùn)行環(huán)境為Windows Vista,2GB內(nèi)存。</p>

54、<p><b>  4.3 條件與限制</b></p><p>  軟件設(shè)計(jì)應(yīng)當(dāng)表現(xiàn)出層次結(jié)構(gòu),它應(yīng)巧妙地利用各個(gè)軟件部件之間的控制關(guān)系。設(shè)計(jì)應(yīng)當(dāng)是模塊化的,即該軟件應(yīng)當(dāng)從邏輯上被劃分成多個(gè)部件,分別實(shí)現(xiàn)各種特定功能和子功能。設(shè)計(jì)最終應(yīng)當(dāng)給出具體的模塊(例如子程序或過(guò)程),這些模塊就具有獨(dú)立的功能特性。應(yīng)當(dāng)應(yīng)用在軟件需求分析期間得到的信息,采取循環(huán)反復(fù)的方法來(lái)獲得設(shè)計(jì)。</p

55、><p>  4.4 網(wǎng)上信息傳播模式</p><p>  根據(jù)信息接收用戶數(shù)目的不同,可以將網(wǎng)上信息傳播模式分成廣播、多播和單播三中模式[5]。</p><p>  廣播即把信息傳送給所有已連接用戶。在這種模式下,如果向各個(gè)用戶逐個(gè)發(fā)送消息,網(wǎng)絡(luò)開銷就非常大。在實(shí)際應(yīng)用中,為了節(jié)約網(wǎng)絡(luò)資源,提高效率,一般要先根據(jù)用戶IP地址將其分組,然后對(duì)每個(gè)分組只發(fā)送一條信息到該分

56、組對(duì)應(yīng)的服務(wù)器,然后再由該服務(wù)器在其對(duì)應(yīng)的局域網(wǎng)內(nèi)進(jìn)行廣播。廣播模式因?yàn)樾枰拇罅烤W(wǎng)絡(luò)資源,一般用于傳輸系統(tǒng)信息[6]。</p><p>  多播即只對(duì)多個(gè)用戶而不是所有用戶傳送消息。在接收用戶數(shù)目較少時(shí),可以采用逐個(gè)發(fā)送的方式;在接收用戶數(shù)目較大時(shí),也需要采用廣播模式中類似的分組方式以節(jié)約網(wǎng)絡(luò)資源。在多播模式下,未分組前需要再傳送信息的頭部添加上墓地IP地址列表,分組后海需要添加分組傳送墓地服務(wù)器的IP地址,

57、傳送到服務(wù)器后由服務(wù)器取出下級(jí)地址列表進(jìn)行多播。多播模式常用于網(wǎng)絡(luò)會(huì)議[7]。</p><p>  單播是多播的一種特例,只將信息發(fā)送給一個(gè)單獨(dú)的用戶。因此,在這種模式下不需要對(duì)用戶進(jìn)行分組,直接將目的IP地址添加在信息頭部即可發(fā)送。網(wǎng)絡(luò)聊天中的單了就是采用這種模式。</p><p>  4.5 C++ Builder中常用的Socket控件</p><p>  一

58、個(gè)IP地址和一個(gè)端口號(hào)的組合稱為一個(gè)套接字(Socket),一個(gè)套接字可以唯一地標(biāo)識(shí)整個(gè)Internet中的一個(gè)網(wǎng)絡(luò)進(jìn)程[8]。屬于套接字和端口號(hào)有時(shí)是可以互相轉(zhuǎn)換的,實(shí)際上,知名服務(wù)器經(jīng)常稱為知名套接字。一對(duì)套接字,一個(gè)用于接收主機(jī),另一個(gè)用于發(fā)送主機(jī),可以定義面向連接協(xié)議的一次連接[9]。網(wǎng)絡(luò)聊天客戶端和服務(wù)端要進(jìn)行消息相互傳遞,就必須先通過(guò)Socket來(lái)建立網(wǎng)絡(luò)連接,在C++ Builder中有兩個(gè)常用的Socket控件Clien

59、tSocket和ServerSocket,他們封裝了WinSocketAPI函數(shù)[10],可以用于建立客戶端和服務(wù)端的Socket連接。</p><p>  4.6 程序體系結(jié)構(gòu)</p><p>  本程序采用Client/Server體系結(jié)構(gòu),即客戶機(jī)服務(wù)器客戶端體系結(jié)構(gòu)。C/S結(jié)構(gòu)廣泛應(yīng)用于構(gòu)造數(shù)據(jù)庫(kù)系統(tǒng),它包括連接在一個(gè)網(wǎng)絡(luò)中的多臺(tái)計(jì)算機(jī)。處理應(yīng)用程序并請(qǐng)求另一臺(tái)計(jì)算機(jī)服務(wù)的計(jì)算機(jī)稱

60、為客戶機(jī),處理數(shù)據(jù)庫(kù)的計(jì)算機(jī)稱為服務(wù)器[11]。其特點(diǎn)是客戶端只裝載應(yīng)用軟件,而把數(shù)據(jù)庫(kù)放在服務(wù)器上,這樣就可以使客戶端不需要存儲(chǔ)數(shù)據(jù),從而簡(jiǎn)化客戶端軟件。</p><p>  借鑒這種設(shè)計(jì)思路,本課題也采用C/S結(jié)構(gòu)。聊天服務(wù)器專門用于監(jiān)控用戶狀態(tài)和轉(zhuǎn)發(fā)消息,當(dāng)客戶端進(jìn)行多播或廣播時(shí),客戶端只需把接收消息的用戶序列和消息文本發(fā)送到服務(wù)器,然后由服務(wù)器轉(zhuǎn)發(fā)到各個(gè)用戶,而不需要向每個(gè)用戶建立連接后發(fā)送消息,這樣就大

61、大減輕了客戶端的任務(wù)[12]。</p><p><b>  5 詳細(xì)設(shè)計(jì)</b></p><p><b>  5.1 設(shè)計(jì)流程</b></p><p>  5.1.1 客戶端與服務(wù)器端之間傳遞的主要消息</p><p><b>  客戶端向服務(wù)器端:</b></p>

62、<p>  1 登錄時(shí)將用戶昵稱傳給服務(wù)器。</p><p>  2 在廣播模式下發(fā)送消息時(shí)將消息正文直接傳送給服務(wù)器。</p><p>  3 在多播模式下發(fā)送消息時(shí)將目的用戶名序列附加在消息正文前,并且在</p><p>  用戶名序列前加上多播標(biāo)記后將整個(gè)字符串作為消息傳送給服務(wù)器。</p><p><b>

63、;  服務(wù)器端向客戶端:</b></p><p>  1 用戶登錄時(shí)向用戶發(fā)送歡迎信息,并在歡迎信息后面附加已經(jīng)登錄的用</p><p><b>  戶名序列。</b></p><p>  2 用戶登錄時(shí)向其他所有已登錄用戶發(fā)出通知。</p><p>  3 收到用戶的廣播消息則向所有登錄用戶轉(zhuǎn)發(fā)消息。

64、</p><p>  4 收到用戶的多播消息則向用戶列表中的用戶轉(zhuǎn)發(fā)消息。</p><p>  5 有用戶注銷時(shí)向所有在線用戶發(fā)出通知。</p><p>  5.1.2 服務(wù)器端程序設(shè)計(jì)流程</p><p>  按照服務(wù)器打開到關(guān)閉的順序,服務(wù)器端程序設(shè)計(jì)流程如下:</p><p>  1 打開服務(wù)器,使其處于監(jiān)

65、聽狀態(tài)。</p><p>  2 某用戶登錄,顯示歡迎信息,并將在線用戶列表發(fā)送給該用戶,在日志列表中記錄該用戶的登錄信息,將該用戶調(diào)價(jià)到在線用戶列表中。</p><p>  3 轉(zhuǎn)發(fā)消息:有用戶發(fā)送廣播消息,則向所有用戶轉(zhuǎn)發(fā)該消息;若是發(fā)送多播消息,則只對(duì)目的用戶轉(zhuǎn)發(fā)。</p><p>  4 某用戶注銷,則向所有在線用戶發(fā)送通知,在日志列表中記錄該用戶的注

66、銷信息并從登錄用戶列表中將該用戶刪除。</p><p>  5 所有用戶注銷,服務(wù)器可正常關(guān)閉,若仍有在線用戶,則關(guān)閉前詢問(wèn)是否真的要關(guān)閉。</p><p>  5.1.3 客戶端程序設(shè)計(jì)流程</p><p>  按照用戶從登錄到注銷的順序,客戶端程序設(shè)計(jì)流程如下:</p><p>  連接服務(wù)器,把用戶昵稱發(fā)送給服務(wù)器,建立連接</

67、p><p>  接收服務(wù)器消息,對(duì)不同的消息采用不同的處理方法:</p><p>  ⑴ 收到服務(wù)器歡迎登錄喜愛系,從中提取出已登錄用戶列表,并逐個(gè)添加到用戶列表中。</p><p> ?、?收到用戶發(fā)送來(lái)的消息,顯示在消息框中。</p><p>  ⑶ 收到其他用戶注銷的消息,從用戶列表中刪除該用戶。</p><p> 

68、 發(fā)送消息,對(duì)不同的消息發(fā)送方式采用不同的處理方法:</p><p> ?、?廣播消息,則直接將消息發(fā)送給服務(wù)器。</p><p>  ⑵ 多播消息,首先在消息正文前添加目的用戶名序列,然后再將多播消息標(biāo)志添加到用戶名序列前。</p><p><b>  斷開連接。</b></p><p>  5.2 服務(wù)器端程序模塊&

69、lt;/p><p>  5.2.1 建立連接程序模塊</p><p>  1.相關(guān)成員函數(shù)和變量的定義</p><p>  在窗體的頭文件chatserveru.h中,加入如下代碼。(為節(jié)省篇幅,沒有列出C++ Builder自動(dòng)產(chǎn)生的代碼)。</p><p>  enum ServerStatus {SS_NOT_RUNNING, SS_RUN

70、NING};</p><p>  enum LogEntryType {LET_WARNING, LET_ERROR, LET_SIGNON, LET_SIGNOFF};</p><p>  enum ServerNotification {SN_LOGON, SN_LOGOFF, SN_PUBLIC_MSG,SN_PRIVATE_MSG};</p><p>  #

71、define CHAT_SERVER_PORT 5790</p><p>  private:// User declarations</p><p>  ServerStatus CurrentServerStatus;</p><p>  void SetServerStatus(ServerStatus _serverstatus);</p>

72、<p>  public:// User declarations</p><p>  __fastcall TChatServerForm(TComponent* Owner);</p><p>  在上述代碼中,首先定義了三個(gè)枚舉類型來(lái)增加程序的可讀性。第一個(gè)ServerStatus用于表示服務(wù)器當(dāng)前的狀態(tài),因?yàn)樵诔绦蛑?,服?wù)器只有兩種狀態(tài),一種是運(yùn)行,另一種是沒有運(yùn)行,

73、因此兩個(gè)可能的枚舉值分別為SS_NOT_RUNNING何SS_RUNNING;第二個(gè)枚舉類型是LogEntryType,在程序中我們用它來(lái)調(diào)用函數(shù)以便在服務(wù)器日志中增加一條日志信息。所有可能的類型包括警告、錯(cuò)誤、登錄提示和注銷提示;第三個(gè)枚舉類型是ServerNofificafion,它用來(lái)發(fā)送服務(wù)器必須處理的事件,這種事件包括登錄、注銷、廣播消息和多播消息。我們通過(guò)將每個(gè)可能的狀態(tài)和提示用相應(yīng)的枚舉類型來(lái)表示,就可以創(chuàng)建一個(gè)中心程序,

74、并減少程序中重復(fù)的代碼。</p><p>  變量CurrentServerStatus用于保存服務(wù)器的狀態(tài),并驗(yàn)證“開始/停止”菜單項(xiàng),函數(shù) SetServerStatus用來(lái)設(shè)置該變量。</p><p>  2 在窗體的構(gòu)造函數(shù)中初始化變量</p><p>  在chatserveru.spp文件中,在窗體的構(gòu)造函數(shù)中加入如下代碼,用于設(shè)置變量的初始值。<

75、/p><p>  __fastcall TChatServerForm::TChatServerForm(TComponent* Owner)</p><p>  : TForm(Owner)</p><p><b>  {</b></p><p>  CurrentServerStatus = SS_NOT_RUNNING

76、;</p><p>  MainServerSocket->Port = CHAT_SERVER_PORT;</p><p><b>  }</b></p><p>  在上述代碼中,首先將表示服務(wù)器狀態(tài)的CurrentServerStatus變量設(shè)置成SS_NOT_RUNNING,表示服務(wù)器沒有進(jìn)入監(jiān)聽狀態(tài)。</p>&l

77、t;p><b>  3 啟動(dòng)服務(wù)器</b></p><p>  單擊“開始”菜單,創(chuàng)建次菜單的OnClick時(shí)間相應(yīng)函數(shù),在其中加入如下代碼。</p><p>  void __fastcall TChatServerForm::StartStopServerClick(TObject *Sender)</p><p><b>

78、  {</b></p><p>  switch(CurrentServerStatus)</p><p><b>  {</b></p><p>  case SS_NOT_RUNNING:</p><p><b>  {</b></p><p>  MainS

79、erverSocket->Open();</p><p>  SetServerStatus(SS_RUNNING);</p><p>  AddLogEntry(LET_WARNING, "服務(wù)器已啟動(dòng)");</p><p>  StartStopServer->Caption = "停止";</p>

80、<p><b>  break;</b></p><p><b>  }</b></p><p>  case SS_RUNNING:</p><p><b>  {</b></p><p>  MainServerSocket->Close();</

81、p><p>  SetServerStatus(SS_NOT_RUNNING);</p><p>  AddLogEntry(LET_WARNING, "服務(wù)器已停止");</p><p>  StartStopServer->Caption = "開始";</p><p><b>  br

82、eak;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  UpdateStatusBar();</p><p><b>  }</b></p><p>  在上述時(shí)間相應(yīng)函數(shù)中,首先

83、判斷CurrentServerStatus變量值。如果CurrentServerStatus變量等于SS_NOT_RUNNING,表示服務(wù)器套接字沒有啟動(dòng),這時(shí)就調(diào)用MainServerSocket組件的Open方法,啟動(dòng)套接字,使服務(wù)器進(jìn)入監(jiān)聽狀態(tài),調(diào)用Open方法等同于將該組件的Active屬性設(shè)置為true,然后調(diào)用SetServerStatus函數(shù)將CurrentServerStatus變量設(shè)置成SS_RUNNING,接著調(diào)用A

84、ddLogEntry函數(shù),在服務(wù)器窗口中顯示服務(wù)器已啟動(dòng),并在開始菜單顯示“停止”。</p><p>  如果CurrentServerStatus變量等于SS_RUNNING,表示服務(wù)器套接字已經(jīng)啟動(dòng),這時(shí)候調(diào)用MainServerSocket組件的Close方法,關(guān)閉套接字,調(diào)用Close方法等同于將該組件的Active屬性設(shè)置false,然后調(diào)用SetServerStatus函數(shù)將CurrentServer

85、Status變量設(shè)置成SS_NOT_RUNNING,接著調(diào)用AddlogEntry函數(shù),在服務(wù)器窗口中顯示服務(wù)器已停止,并在開始菜單顯示“開始”。</p><p>  最后通過(guò)調(diào)用UpdateStatusBar函數(shù),在狀態(tài)欄上現(xiàn)實(shí)有多少個(gè)用戶連接。</p><p><b>  4 相應(yīng)客戶的連接</b></p><p>  當(dāng)客戶連接到服務(wù)器上

86、時(shí),觸發(fā)TServerSocket的OnClientConnect時(shí)間。在對(duì)象監(jiān)視器中雙擊MainServerSocket的OnClientConnect事件,創(chuàng)建此事件相應(yīng)函數(shù),在其中加入如下代碼。</p><p>  void __fastcall TChatServerForm::MainServerSocketClientConnect(TObject *Sender,</p><p&

87、gt;  TCustomWinSocket *Socket)</p><p><b>  {</b></p><p>  Socket->Data = 0;</p><p>  AddConnectionToListView(Socket);</p><p>  UpdateStatusBar();</p&g

88、t;<p><b>  }</b></p><p>  每當(dāng)一個(gè)客戶請(qǐng)求連接時(shí)就激活TServerSocket控件的OnClientConnect事件。在該事件中,我們啟動(dòng)一個(gè)包含Windows套接字的TCustomWinSocket對(duì)象。然后初始化此對(duì)象的數(shù)據(jù)成員,使它在以后使用時(shí)成為一個(gè)已知的數(shù)值,在這種情況下應(yīng)保證它的Data為0,TCustomWinSocket的成員變

89、量Data對(duì)于創(chuàng)建多線程網(wǎng)絡(luò)程序非常有用。接下來(lái)我們調(diào)用AddConnectionToListView在列表中添加一個(gè)新的連接。最后我們調(diào)用UpdatStatusBar函數(shù)來(lái)更新服務(wù)器的狀態(tài)欄,表明有一個(gè)新的客戶連接。</p><p>  至此,服務(wù)器打開后有用戶連接上時(shí),才真正建立了服務(wù)器和客戶端的連接。</p><p>  5.2.2 服務(wù)器監(jiān)聽模塊</p><p&

90、gt;  1 相關(guān)成員函數(shù)的定義</p><p>  在窗體的頭文件chatserveru.h中,加入如下代碼。</p><p>  private:// User declarations</p><p>  ServerStatus CurrentServerStatus;</p><p>  void SetServerStatus(

91、ServerStatus _serverstatus);</p><p>  void AddConnectionToListView(TCustomWinSocket *ClientSocket);</p><p>  void RemoveConnectionFromListView(TCustomWinSocket *Socket);</p><p>  vo

92、id UpdateStatusBar(bool DecUse = false);</p><p>  void AddLogEntry(LogEntryType let, AnsiString EntryText);</p><p>  void SetUserBySocket(TCustomWinSocket *Socket, const AnsiString &UserNick

93、Name);</p><p>  void GetUserBySocket(TCustomWinSocket *Socket, AnsiString &UserNickName);</p><p>  int GetSocketNoByUser(AnsiString User);</p><p>  TListItem * ListItemBySocket(

94、TCustomWinSocket *Socket);</p><p>  EntryTypeToText函數(shù)用于將入口類型轉(zhuǎn)變?yōu)槿肟谛畔⑽谋尽?lt;/p><p><b>  2 監(jiān)聽內(nèi)容</b></p><p>  服務(wù)器打開后,就處于監(jiān)聽狀態(tài),主要監(jiān)聽內(nèi)容有以下幾項(xiàng):</p><p> ?、?用戶登錄,將其用戶名加到已登

95、錄用戶列表</p><p>  void TChatServerForm::AddConnectionToListView(TCustomWinSocket *ClientSocket)</p><p><b>  {</b></p><p>  //客戶第一個(gè)要發(fā)送的就是他的綽號(hào)</p><p>  AnsiStrin

96、g UserNickName = "未知";</p><p>  TListItem *TempItem = ConnectionsListView->Items->Add();</p><p>  TempItem->Caption = UserNickName;</p><p>  TDateTime CurrentDT(T

97、DateTime::CurrentDateTime());</p><p>  TempItem->SubItems->Add(ClientSocket->RemoteHost);</p><p>  TempItem->SubItems->Add(CurrentDT);</p><p>  TempItem->Data = Cl

98、ientSocket;</p><p><b>  }</b></p><p> ?、?將用戶登錄信息加入日志列表</p><p>  void TChatServerForm::AddLogEntry(LogEntryType let, AnsiString EntryText)</p><p><b>  

99、{</b></p><p>  TListItem *item = LogEntryListView->Items->Add();</p><p>  AnsiString entrytype;</p><p>  EntryTypeToText(let, entrytype);</p><p>  item->

100、Caption = entrytype;</p><p>  item->SubItems->Add(EntryText);</p><p>  item->SubItems->Add(TDateTime::CurrentDateTime());</p><p><b>  }</b></p><p&

101、gt;  void EntryTypeToText(LogEntryType let, AnsiString &text)</p><p><b>  {</b></p><p>  switch(let)</p><p><b>  {</b></p><p>  case LET_WAR

102、NING:</p><p><b>  {</b></p><p>  text = "提示";</p><p><b>  break;</b></p><p><b>  }</b></p><p>  case LET_ERRO

103、R:</p><p><b>  {</b></p><p>  text = "錯(cuò)誤";</p><p><b>  break;</b></p><p><b>  }</b></p><p>  case LET_SIGNON:

104、</p><p><b>  {</b></p><p>  text = "登錄";</p><p><b>  break;</b></p><p><b>  }</b></p><p>  case LET_SIGNOFF:&

105、lt;/p><p><b>  {</b></p><p>  text = "注銷";</p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  default:&l

106、t;/b></p><p><b>  {</b></p><p>  text = "未知";</p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  }

107、</b></p><p><b>  }</b></p><p> ?、?用戶注銷,將其用戶名從已登錄用戶列表中刪除</p><p>  void TChatServerForm::RemoveConnectionFromListView(TCustomWinSocket *Socket)</p><p>&

108、lt;b>  {</b></p><p>  TListItem *item = ListItemBySocket(Socket);</p><p><b>  if (item)</b></p><p>  ConnectionsListView->Items->Delete(item->Index);&l

109、t;/p><p><b>  }</b></p><p>  TListItem * TChatServerForm::ListItemBySocket(TCustomWinSocket *Socket)</p><p><b>  {</b></p><p>  for (int i = 0; i &

110、lt;ConnectionsListView->Items->Count; i++)</p><p><b>  {</b></p><p>  if (reinterpret_cast<TCustomWinSocket *>(ConnectionsListView->Items->Item[i]->Data) == Soc

111、ket)</p><p><b>  {</b></p><p>  return ConnectionsListView->Items->Item[i];</p><p><b>  }</b></p><p><b>  }</b></p><

112、;p>  return NULL;</p><p><b>  }</b></p><p><b> ?、?更新狀態(tài)欄顯示</b></p><p>  void TChatServerForm::UpdateStatusBar(bool DecUse/* = false*/)</p><p>

113、<b>  {</b></p><p>  switch(CurrentServerStatus)</p><p><b>  {</b></p><p>  case SS_NOT_RUNNING:</p><p><b>  {</b></p><p&g

114、t;  ChatServerStatusBar->SimpleText = "選擇開始菜單進(jìn)入聊天";</p><p><b>  break;</b></p><p><b>  }</b></p><p>  case SS_RUNNING:</p><p><b

115、>  {</b></p><p>  if (DecUse)</p><p>  ChatServerStatusBar->SimpleText = IntToStr(MainServerSocket->Socket->ActiveConnections - 1) + "個(gè)客戶已連接";</p><p><

116、;b>  else</b></p><p>  ChatServerStatusBar->SimpleText = IntToStr(MainServerSocket->Socket->ActiveConnections) + "個(gè)客戶已連接";</p><p><b>  break;</b></p>

117、;<p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  5.2.3 服務(wù)器端讀取及發(fā)送信息模塊</p><p>  1 相關(guān)成員函數(shù)和變量的定義</p><p>

118、  在窗體的頭文件chatserveru.h中,加入如下代碼。</p><p>  private:// User declarations</p><p>  ServerStatus CurrentServerStatus;</p><p>  void SetServerStatus(ServerStatus _serverstatus);</p>

119、;<p>  void AddConnectionToListView(TCustomWinSocket *ClientSocket);</p><p>  void RemoveConnectionFromListView(TCustomWinSocket *Socket);</p><p>  void UpdateStatusBar(bool DecUse = fals

120、e);</p><p>  void AddLogEntry(LogEntryType let, AnsiString EntryText);</p><p>  void SetUserBySocket(TCustomWinSocket *Socket, const AnsiString &UserNickName);</p><p>  void Get

121、UserBySocket(TCustomWinSocket *Socket, AnsiString &UserNickName);</p><p>  int GetSocketNoByUser(AnsiString User);</p><p>  TListItem * ListItemBySocket(TCustomWinSocket *Socket);</p>

122、<p>  void BroadcastMessage(AnsiString Message, TCustomWinSocket *ExcludeSocket);</p><p>  void MulticastMessage(AnsiString Message, AnsiString UserList); //*!</p><p>  void SendNotificati

123、on(ServerNotification sn, AnsiString additional, TCustomWinSocket *ExcludeSocket);</p><p>  2 服務(wù)器端讀取及發(fā)送信息程序</p><p>  當(dāng)合客戶端建立連接護(hù),接下來(lái)是TServerSocket組件的OnClientRead事件,當(dāng)客戶得知他已經(jīng)成功地與服務(wù)器建立連接后,將發(fā)送他希望在繪畫進(jìn)

溫馨提示

  • 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(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)論