2023年全國(guó)碩士研究生考試考研英語(yǔ)一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩64頁(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>  本科畢業(yè)設(shè)計(jì)(論文)</p><p>  題目:Linux下基于C++開發(fā)的即時(shí)通訊軟件</p><p>  院 系: 計(jì)算機(jī)科學(xué)與工程 </p><p><b>  學(xué)科專業(yè):</b></p><p>  學(xué) 生: </p><p> 

2、 學(xué) 號(hào): 0 </p><p>  指導(dǎo)教師: </p><p><b>  2013年 6月</b></p><p>  畢業(yè)設(shè)計(jì)(論文)任務(wù)書</p><p>  1.畢業(yè)設(shè)計(jì)(論文)題目: Linux下基于C++開發(fā)的即時(shí)通訊軟件

3、 </p><p>  2.題目背景和意義: 21世紀(jì)以計(jì)算機(jī)為代表的信息產(chǎn)業(yè),標(biāo)志著人類社會(huì)進(jìn)入了信息時(shí)代,計(jì)算機(jī)網(wǎng)絡(luò)的研究和發(fā)展。特別是Internet在全球的推廣和應(yīng)用,對(duì)全世界科學(xué)、經(jīng)濟(jì)和社會(huì)產(chǎn)生了重大影響。而網(wǎng)絡(luò)通訊的出現(xiàn)又把全世界各個(gè)地方的人的距離拉得越來(lái)越近!隨著互聯(lián)網(wǎng)的普及,具有交互功能的應(yīng)用軟件日益受到親睞,尤其是即時(shí)通訊軟件

4、ICS大受歡迎。163和263網(wǎng)站使用ICS的在線人數(shù)常達(dá)幾萬(wàn)人,上百萬(wàn)人同時(shí)出現(xiàn)在騰訊QQ上。優(yōu)秀的ICS確實(shí)為天南地北的人們的信息勾通提供了便利,對(duì)提高網(wǎng)站知名度起到了至關(guān)重要的作用, 國(guó)外有的公司甚至把ICS作為支柱軟件推出。</p><p>  即時(shí)通訊(Instant messaging,簡(jiǎn)稱IM)是一個(gè)終端服務(wù),允許兩人或多人使用網(wǎng)絡(luò)即時(shí)地傳遞文字信息、文件、語(yǔ)音與視頻交流。它是一種使人們能在網(wǎng)上識(shí)別

5、在線用戶并與他們實(shí)時(shí)交換消息的技術(shù)。即時(shí)通訊被認(rèn)為比電子郵件更具有自發(fā)性,甚至能在進(jìn)行實(shí)時(shí)文本對(duì)話的同時(shí)瀏覽網(wǎng)上信息。利用“即時(shí)通訊”工具,用戶間可以實(shí)現(xiàn)異地文字、語(yǔ)言、視頻的實(shí)時(shí)互通;同時(shí),借助即時(shí)通訊工具,還可以幫助企業(yè)提高業(yè)務(wù)協(xié)同性及反饋的敏感度和快捷度。作為使用頻率最高的網(wǎng)絡(luò)軟件,即時(shí)通訊已被認(rèn)為是現(xiàn)代交流方式的新象征。</p><p>  本畢業(yè)設(shè)計(jì)就是模擬QQ聊天軟件,開發(fā)一個(gè)包括文字聊天、保存用戶信

6、息等功能的即時(shí)通信軟件。采用C/S架構(gòu),基于Linux平臺(tái)開發(fā),采用C++編程語(yǔ)言。由服務(wù)器端和客戶端程序組成。采用ICE中間件,解除服務(wù)器和客戶端的耦合。并使用QT進(jìn)行圖形界面的設(shè)計(jì)。主要實(shí)現(xiàn)的是聊天軟件的部分功能,即文字聊天、圖片文件傳送、保存用戶消息等功能。使用Linux開發(fā)的原因是Linux 操作系統(tǒng)作為一個(gè)開源的操作系統(tǒng)被越來(lái)越多的人所應(yīng)用,它的好處在于操作系統(tǒng)源代碼的公開化!只要是基于GNU公約的軟件你都可以任意使用并修改它

7、的源代碼。在Linux下編程的最佳語(yǔ)言應(yīng)該是C語(yǔ)言,Linux上的很多應(yīng)用程序就是用C語(yǔ)言寫的。因?yàn)镼T是用C/C++語(yǔ)言編寫的,所以在開發(fā)LINUX下的GUI程序時(shí)使用C/C++語(yǔ)言是非常方便的。預(yù)期開發(fā)的軟件非常實(shí)用,可以在多平臺(tái)運(yùn)行,有很大的應(yīng)用價(jià)值。</p><p>  3.設(shè)計(jì)(論文)的主要內(nèi)容(理工科含技術(shù)指標(biāo)):要求在Linux操作系統(tǒng)環(huán)境下使用Microsoft QT編程軟件,利用ICE中間件及S

8、QLite開發(fā)一款即時(shí)通訊軟件。該軟件可以實(shí)現(xiàn)的功能:1、登錄功能。2、申請(qǐng)新用戶的功能。3、客戶可以通過(guò)服務(wù)器轉(zhuǎn)發(fā),實(shí)現(xiàn)一對(duì)一的聊天。4、顯示在線好友。5、服務(wù)器顯示用戶和狀態(tài)。6、務(wù)器端可以保存用戶的信息,同時(shí)將信息保存在文件和數(shù)據(jù)庫(kù)中。7、客戶端程序可以顯示好友列表。8、應(yīng)該具有易用、穩(wěn)定的圖形界面。9、系統(tǒng)實(shí)現(xiàn)保存聊天記錄的功能。10、發(fā)送系統(tǒng)消息。11、服務(wù)器端保存錯(cuò)誤日志。12、從數(shù)據(jù)庫(kù)中讀取保存用戶信息。13、發(fā)送文字消息

9、、文件、圖片。</p><p>  4.設(shè)計(jì)的基本要求及進(jìn)度安排(含起始時(shí)間、設(shè)計(jì)地點(diǎn)):1、基本要求:熟悉Linux系統(tǒng)環(huán)境,掌握C++、數(shù)據(jù)庫(kù)、網(wǎng)絡(luò)編程、ICE、QT相關(guān)知識(shí),能夠熟悉掌握Linux下環(huán)境下的編程平臺(tái),了解UC的相關(guān)庫(kù)函數(shù)。2.畢業(yè)設(shè)計(jì)時(shí)間共18周,第 1 周:研究此項(xiàng)目所要解決的問(wèn)題,確定軟件功能需求。第 2-3周:進(jìn)行整體方案的初步設(shè)計(jì),整理初步設(shè)計(jì)方案。第4-8 周:著手編輯本系統(tǒng)運(yùn)行所

10、需要的各個(gè)模塊,并測(cè)試。第9-13周:完成計(jì)劃中系統(tǒng)的全部功能,做測(cè)試和修整。第14-15周:完成系統(tǒng)的整體測(cè)試。第16-18周:完成論文的撰寫,為畢業(yè)答辯做準(zhǔn)備。3.畢業(yè)設(shè)計(jì)地點(diǎn):西安工業(yè)大學(xué)。 </p><p>  5.畢業(yè)設(shè)計(jì)(論文)的工作量要求 撰寫15000字論文

11、 </p><p> ?、?實(shí)驗(yàn)(時(shí)數(shù))或?qū)嵙?xí)(天數(shù)): 300機(jī)時(shí) </p><p>  ② 圖紙(幅面和張數(shù)):

12、 </p><p> ?、?其他要求:論文有老師輔導(dǎo)完成,不得抄襲,按進(jìn)度完成,論文在現(xiàn)有功能可完善 </p><p>  指導(dǎo)教師簽名: 年 月 日</p><p>  學(xué)生簽

13、名: 呂磊 2012 年12 月 8 日</p><p>  系(教研室)主任審批: 年 月 日</p><p>  說(shuō)明:1本表一式二份,一份由學(xué)生裝訂入附件冊(cè),一份教師自留。</p><p>  2 帶*項(xiàng)可根據(jù)學(xué)科特點(diǎn)選填。</p><p>  Linux下基于

14、C++語(yǔ)言開發(fā)的即時(shí)通信軟件</p><p><b>  摘 要</b></p><p>  網(wǎng)絡(luò)通訊是目前計(jì)算機(jī)用戶進(jìn)行交流最普遍的方式,各種各樣的聊天軟件也層出不窮;服務(wù)提供商也提供了越來(lái)越豐富的通訊服務(wù)功能。當(dāng)前中國(guó)的互聯(lián)網(wǎng)技術(shù)已經(jīng)進(jìn)入了一個(gè)飛速發(fā)展的時(shí)期,即時(shí)通訊工具作為當(dāng)今網(wǎng)絡(luò)應(yīng)用的主流,越來(lái)越受到了人們的青睞,使人們的網(wǎng)上生活更加豐富多彩。當(dāng)今使用最為廣泛

15、的即時(shí)通信工具,微軟公司的MSN,騰訊公司的 QQ 聊天軟件等為人們的工作和生活帶來(lái)很大的便利。特別是對(duì)于騰訊來(lái)說(shuō),其公司的收益很大部分是歸功于QQ龐大的客戶群,并在此基礎(chǔ)上拓展其他的業(yè)務(wù)。</p><p>  本畢業(yè)設(shè)計(jì)就是模擬 QQ 聊天軟件,開發(fā)一個(gè)包括文字聊天、保存用戶信息等功能的即時(shí)通信軟件。</p><p>  采用 C/S 架構(gòu),基于Linux平臺(tái)開發(fā),采用C++編程語(yǔ)言。由

16、服務(wù)器端和客戶端程序組成。采用ICE中間件,解除服務(wù)器和客戶端的耦合。并使用QT進(jìn)行圖形界面的設(shè)計(jì)。主要實(shí)現(xiàn)的是聊天軟件的部分功能,即文字聊天、保存用戶消息等功能,主要完成的任務(wù)包括服務(wù)器模塊的設(shè)計(jì)、文字聊天,保存用戶信息等功能。通過(guò)運(yùn)行、測(cè)試與分析,該多功能聊天軟件運(yùn)行穩(wěn)定、可靠,具有一定的實(shí)用價(jià)值。</p><p>  關(guān)鍵詞:聊天軟件 文字聊天 Linux平臺(tái) C/S架構(gòu)</p><

17、;p>  Linux-based instant messaging softwareusing C++ language development</p><p><b>  Abstract</b></p><p>  Network communication is the computer users to communicate the m

18、ost common way, all kinds of chat software also emerge in endlessly; Service providers also provide more and more rich communication service functions. The current China's Internet technology has entered a rapid deve

19、lopment period, instant communication tools as the network application of mainstream, more and more get the favour of people, make people online life more colorful. The most widely used instant communication tools, Micro

20、</p><p>  The graduation design is simulated QQ chat software, the development of a text chat, group chat function of instant communication software.</p><p>  Using C/S structure, based on Linux

21、 platform development, the C++ programming language. And use QT for the design of the graphical interface. The realization of the main chat software is part of the function, which text chat, the function such as news gro

22、up, the main task of the module design, including the server text chat, mass news etc. Function. Through the operation, test and analysis, the multifunctional chat software operation is stable, reliable, and has a certai

23、n practical value.</p><p>  Keywords: chat software text chat Linux platform C/S </p><p><b>  目錄</b></p><p><b>  摘 要I</b></p><p>  Abst

24、ractII</p><p><b>  1 前言1</b></p><p>  1.1課題研究背景和現(xiàn)狀1</p><p>  1.1.1研究背景1</p><p>  1.1.2研究現(xiàn)狀和發(fā)展趨勢(shì)1</p><p>  1.2本課題研究的目的和意義2</p><

25、p>  1.3開發(fā)工具及工具簡(jiǎn)介2</p><p>  1.3.1Linux操作系統(tǒng)2</p><p>  1.3.2數(shù)據(jù)庫(kù)SQLite2</p><p>  1.3.3開發(fā)語(yǔ)言C++語(yǔ)言3</p><p>  1.3.4 Qt編程軟件3</p><p>  2 即時(shí)通信軟件系統(tǒng)總體設(shè)計(jì)5</

26、p><p>  2.1即使通信系統(tǒng)總體結(jié)構(gòu)及總體需求5</p><p>  2.2總體性能需求分析6</p><p>  2.2.1服務(wù)器端性能需求6</p><p>  2.2.2客戶端端性能需求6</p><p>  2.2.3錯(cuò)誤處理需求6</p><p>  3 程序設(shè)計(jì)方案7&

27、lt;/p><p><b>  3.1方案比較7</b></p><p>  3.1.1采用TCP方式連接7</p><p>  3.1.2采用UDP方式連接8</p><p><b>  3.2方案比較8</b></p><p>  3.3總體設(shè)計(jì)方案8</p&

28、gt;<p>  3.3.1服務(wù)器端功能模塊劃分8</p><p>  3.3.2客戶端端功能模塊劃分9</p><p>  3.3.3UDP協(xié)議10</p><p>  3.3.4TCP協(xié)議11</p><p>  3.3.5消息標(biāo)識(shí)定義12</p><p>  3.3.6服務(wù)器接口函數(shù)13

29、</p><p>  4 即時(shí)通訊系統(tǒng)軟件詳細(xì)設(shè)計(jì)14</p><p>  4.1服務(wù)器端設(shè)計(jì)思想14</p><p>  4.2客戶端設(shè)計(jì)思想16</p><p>  4.3服務(wù)器端詳細(xì)設(shè)計(jì)19</p><p>  4.3.1服務(wù)器端主體19</p><p>  4.3.2服務(wù)器端線

30、程實(shí)現(xiàn)19</p><p>  4.3.3服務(wù)器端函數(shù)實(shí)現(xiàn)20</p><p>  4.4客戶端圖形界面詳細(xì)設(shè)計(jì)21</p><p>  4.4.1連接窗體22</p><p>  4.4.2登陸窗體25</p><p>  4.4.3注冊(cè)窗體27</p><p>  4.4.4用戶

31、窗體29</p><p>  4.4.5對(duì)話窗體33</p><p>  4.4.6服務(wù)器的界面詳細(xì)設(shè)計(jì)38</p><p><b>  5 結(jié)論41</b></p><p>  5.1教訓(xùn)及經(jīng)驗(yàn)總結(jié)41</p><p><b>  5.2總結(jié)41</b><

32、/p><p><b>  參考文獻(xiàn)43</b></p><p><b>  致 謝44</b></p><p>  畢業(yè)設(shè)計(jì)(論文)知識(shí)產(chǎn)權(quán)聲明45</p><p>  畢業(yè)設(shè)計(jì)(論文)獨(dú)創(chuàng)性聲明46</p><p><b>  外文原文47</b&g

33、t;</p><p><b>  中文翻譯54</b></p><p><b>  1 前言</b></p><p>  1.1課題研究背景和現(xiàn)狀</p><p><b>  1.1.1研究背景</b></p><p>  21世紀(jì)以計(jì)算機(jī)為代表的信

34、息產(chǎn)業(yè),標(biāo)志著人類社會(huì)進(jìn)入了信息時(shí)代,計(jì)算機(jī)網(wǎng)絡(luò)的研究和發(fā)展。特別是Internet在全球的推廣和應(yīng)用,對(duì)全世界科學(xué)、經(jīng)濟(jì)和社會(huì)產(chǎn)生了重大影響。而網(wǎng)絡(luò)通訊的出現(xiàn)又把全世界各個(gè)地方的人的距離拉得越來(lái)越近!隨著互聯(lián)網(wǎng)的普及,具有交互功能的應(yīng)用軟件日益受到親睞,尤其是即時(shí)通訊軟件ICS大受歡迎。163和263網(wǎng)站使用ICS的在線人數(shù)常達(dá)幾萬(wàn)人,上百萬(wàn)人同時(shí)出現(xiàn)在騰訊的QQ上。優(yōu)秀的ICS確 實(shí)為天南地北的人們的信息勾通提供了便利,對(duì)提高網(wǎng)站知

35、名度起到了至關(guān)重要的作用, 國(guó)外有的公司甚至把ICS作為支柱軟件推出。</p><p>  1.1.2研究現(xiàn)狀和發(fā)展趨勢(shì)</p><p>  自1990s,四位以色列人推出的ICQ后,IM首次出現(xiàn),憑借實(shí)時(shí)在線的交互特性迅速風(fēng)靡全球。如今,IM軟件正逐漸成為一個(gè)集合了文字、視頻、音頻業(yè)務(wù)以及多種增值業(yè)務(wù)的多媒體網(wǎng)絡(luò)通信軟件,憑借其所具有的廉價(jià)性和方便性,以及功能不斷完善,IM已經(jīng)和WWW、

36、Email等一起成為網(wǎng)民們最喜愛(ài)的網(wǎng)絡(luò)服務(wù)之一。尤其在國(guó)內(nèi),騰訊QQ普及率遠(yuǎn)高于Email,在部分中國(guó)網(wǎng)民眼中上網(wǎng)基本等價(jià)于使用QQ等。2010年3月5日19時(shí)52分58秒,騰訊QQ同時(shí)在線用戶數(shù)突破了1億。截止到2009年3月18日,QQ官方宣布注冊(cè)賬戶數(shù)量超過(guò)8.919億,活躍賬戶數(shù)量超過(guò)3.766億。</p><p>  近年來(lái)公共互聯(lián)網(wǎng)上的即時(shí)通訊發(fā)展迅猛,并向著未來(lái)通信和協(xié)作的主要模式演化。這種演化主要

37、表現(xiàn)為:從文本向話音、視頻和多媒體演化;從固定網(wǎng)絡(luò)向無(wú)線移動(dòng)演化;從個(gè)人通信向企業(yè)即時(shí)通信和協(xié)作演化;在體系結(jié)構(gòu)方面,從集中服務(wù)器向?qū)Φ冗B接P2P演化;從專門系統(tǒng)向開放系統(tǒng)演化,推動(dòng)實(shí)現(xiàn)不同系統(tǒng)的互通??傮w看,是從即時(shí)通訊向新一代統(tǒng)一消息演化。</p><p>  1.2本課題研究的目的和意義</p><p>  即時(shí)通訊(Instant messaging,簡(jiǎn)稱IM)是一個(gè)終端服務(wù),允許

38、兩人或多人使用網(wǎng)絡(luò)即時(shí)地傳遞文字信息、文件、語(yǔ)音與視頻交流。它是一種使人們能在網(wǎng)上識(shí)別在線用戶并與他們實(shí)時(shí)交換消息的技術(shù)。即時(shí)通訊被認(rèn)為比電子郵件更具有自發(fā)性,甚至能在進(jìn)行實(shí)時(shí)文本對(duì)話的同時(shí)瀏覽網(wǎng)上信息。     利用“即時(shí)通訊”工具,用戶間可以實(shí)現(xiàn)異地文字、語(yǔ)言、視頻的實(shí)時(shí)互通;同時(shí),借助即時(shí)通訊工具,還可以幫助企業(yè)提高業(yè)務(wù)協(xié)同性及反饋的敏感度和快捷度。作為使用頻率最高的網(wǎng)絡(luò)軟件,即時(shí)通訊已被認(rèn)為是現(xiàn)

39、代交流方式的新象征。</p><p>  1.3開發(fā)工具及工具簡(jiǎn)介</p><p>  操作系統(tǒng):Linux操作系統(tǒng)</p><p>  數(shù)據(jù)庫(kù):SQLite</p><p>  編程語(yǔ)言:C++語(yǔ)言</p><p>  開發(fā)工具:QT編程軟件</p><p>  1.3.1Linux操作系統(tǒng)&

40、lt;/p><p>  最早的Fedora Linux社區(qū)的目標(biāo)是Red Hat Linux制作并發(fā)布第三方的軟件包,然而當(dāng)Red Hat Linux停止發(fā)行后,F(xiàn)edora社區(qū)便集成到Red Hat贊助的Fedora Project,目標(biāo)是開發(fā)出由社區(qū)支持的操作系統(tǒng)Red Hat,Enterprise Linux則取代Red Hat Linux成為官方支持的系統(tǒng)版本。 </p><p>  

41、Fedora Core是眾多Linux發(fā)行套件之一。它是一套從Red Hat Linux 發(fā)展出來(lái)的免費(fèi)Linux 系統(tǒng)。現(xiàn)時(shí)Fedora最新的版本是Fedora16,F(xiàn)edora是Linux發(fā)行版中更新最快的之一,通常每6個(gè)月發(fā)布一個(gè)正式的新版本。 </p><p>  Fedora和Red Hat這兩個(gè)Linux的發(fā)行版聯(lián)系很密切。Red Hat自9.0以后,不再發(fā)布桌面版的,而是把這個(gè)項(xiàng)目與開源社區(qū)合作,于

42、是就有了Fedora 這個(gè) Linux 發(fā)行版。Fedora 可以說(shuō)是Red hat桌面版本的延續(xù),只不過(guò)是與開源社區(qū)合作。</p><p>  1.3.2數(shù)據(jù)庫(kù)SQLite</p><p>  數(shù)據(jù)庫(kù)是依照某種數(shù)據(jù)模型組織起來(lái)并存放二級(jí)存儲(chǔ)器中的數(shù)據(jù)集合。這種數(shù)據(jù)集合具有如下特點(diǎn):盡可能不重復(fù),以最優(yōu)方式為某個(gè)特定組織的多種應(yīng)用服務(wù),其數(shù)據(jù)結(jié)構(gòu)獨(dú)立于使用它的應(yīng)用程序,對(duì)數(shù)據(jù)的增、刪、改和

43、檢索由統(tǒng)一軟件進(jìn)行管理和控制。從發(fā)展的歷史看,數(shù)據(jù)庫(kù)是數(shù)據(jù)管理的高級(jí)階段,它是由文件管理系統(tǒng)發(fā)展起來(lái)的。</p><p>  SQLite,是一款輕型的數(shù)據(jù)庫(kù),是遵守ACID的關(guān)聯(lián)式數(shù)據(jù)庫(kù)管理系統(tǒng),它的設(shè)計(jì)目標(biāo)是嵌入式的,而且目前已經(jīng)在很多嵌入式產(chǎn)品中使用了它,它占用資源非常的低,可能只需要幾百K的內(nèi)存就夠了。它能夠支持Windows/Linux/Unix等等主流的操作系統(tǒng),同時(shí)能夠跟很多程序語(yǔ)言相結(jié)合,比如 T

44、cl、C#、PHP、Java等,還有ODBC接口,同樣比起Mysql、PostgreSQL這兩款開源世界著名的數(shù)據(jù)庫(kù)管理系統(tǒng)來(lái)講,它的處理速度比他們都快。SQLite第一個(gè)Alpha版本誕生于2000年5月。 至今已經(jīng)有12個(gè)年頭,SQLite也迎來(lái)了一個(gè)版本 SQLite 3已經(jīng)發(fā)布。</p><p>  1.3.3開發(fā)語(yǔ)言C++語(yǔ)言</p><p>  C++程序設(shè)計(jì)語(yǔ)言是由來(lái)自AT&

45、amp;T Bell Laboratories的Bjarne Stroustrup(即本文作者)設(shè)計(jì)和實(shí)現(xiàn)的,它兼具Simula語(yǔ)言在組織與設(shè)計(jì)方面的特性以及適用于系統(tǒng)程序設(shè)計(jì)的C語(yǔ)言設(shè)施。C++最初的版本被稱作“帶類的(C with classes)”[Stroustrup,1980],在1980年被第一次投入使用;當(dāng)時(shí)它只支持系統(tǒng)程序設(shè)計(jì)(§3)和數(shù)據(jù)抽象技術(shù)(§4.1)。支持面向?qū)ο蟪绦蛟O(shè)計(jì)的語(yǔ)言設(shè)施在1983

46、年被加入C++;之后,面向?qū)ο笤O(shè)計(jì)方法和面向?qū)ο蟪绦蛟O(shè)計(jì)技術(shù)就逐漸進(jìn)入了C++領(lǐng)域。在1985年,C++第一次投入商業(yè)市場(chǎng)[Stroustrup,1986][Stroustrup,1986b]。在1987至1989年間,支持范型程序設(shè)計(jì)的語(yǔ)言設(shè)施也被加進(jìn)了C++[Ellis,1990][Stroustrup,1991]。 </p><p>  隨著若干獨(dú)立開發(fā)的C++實(shí)現(xiàn)產(chǎn)品的出現(xiàn)和廣泛應(yīng)用,正式的C++標(biāo)準(zhǔn)化工

47、作在1990年啟動(dòng)。標(biāo)準(zhǔn)化工作由ANSI(American National Standard Institute)以及后來(lái)加入的ISO(International Standards Organization)負(fù)責(zé)。1998年正式發(fā)布了C++語(yǔ)言的國(guó)際標(biāo)準(zhǔn)[C++,1998]。在標(biāo)準(zhǔn)化工作進(jìn)展期間,標(biāo)準(zhǔn)委員會(huì)充當(dāng)了一個(gè)重要的角色,其發(fā)布的C++標(biāo)準(zhǔn)之草案在正式標(biāo)準(zhǔn)發(fā)布之前,一直被作為過(guò)渡標(biāo)準(zhǔn)而存在。</p><p&

48、gt;  1.3.4 Qt編程軟件</p><p>  Qt是一個(gè)1991年由奇趣科技開發(fā)的跨平臺(tái)C++圖形用戶界面應(yīng)用程序開發(fā)框架。它既可以開發(fā)GUI程式,也可用于開發(fā)非GUI程式,比如控制臺(tái)工具和服務(wù)器。Qt是面向?qū)ο笳Z(yǔ)言,易于擴(kuò)展,并且允許組件編程。2008年,奇趣科技被諾基亞公司收購(gòu),QT也因此成為諾基亞旗下的編程語(yǔ)言工具。在發(fā)布Qt 4.6 的同時(shí),作為 Qt 開發(fā)跨平臺(tái) IDE 的 Qt Creat

49、or 也發(fā)布了更新版本。Qt Creator 1.3 和 Qt 4.6共同構(gòu)成的 Qt SDK,包含了開發(fā)跨平臺(tái)應(yīng)用程序所需的全部功能。 Qt Creator是一個(gè)用于Qt開發(fā)的輕量級(jí)跨平臺(tái)集成開發(fā)環(huán)境。Qt Creator可帶來(lái)兩大關(guān)鍵益處:提供首個(gè)專為支持跨平臺(tái)開發(fā)而設(shè)計(jì)的集成開發(fā)環(huán)境 (IDE),并確保首次接觸Qt框架的開發(fā)人員能迅速上手和操作。 Qt Creator包含了一套用于創(chuàng)建和測(cè)試基于Qt應(yīng)用程序的高效工具,包括: 一個(gè)

50、高級(jí)的C++代碼編輯器 上下文感知幫助系統(tǒng) 可視化調(diào)試器 源代碼管理 項(xiàng)目和構(gòu)建管理工具 Qt Creator在LGPL2.1版本授權(quán)下有效,并且接受代碼貢獻(xiàn)。</p><p>  2 即時(shí)通信軟件系統(tǒng)總體設(shè)計(jì)</p><p>  2.1即使通信系統(tǒng)總體結(jié)構(gòu)及總體需求</p><p>  本系統(tǒng)是一個(gè)即時(shí)通訊程序,目前實(shí)現(xiàn)是在局域網(wǎng)下。本系統(tǒng)分為服務(wù)器和客戶端兩個(gè)

51、應(yīng)用程序,服務(wù)器負(fù)責(zé)管理客戶端,客戶端之間自由通訊。服務(wù)器端和客戶端之間使用TCP協(xié)議進(jìn)行通信。模塊的工作方式如下:</p><p>  圖2-1 服務(wù)器和客戶端工作方式簡(jiǎn)圖</p><p>  為了開發(fā)出符合要求的網(wǎng)絡(luò)聊天程序,首先必須知道使用者的需求。對(duì)需求的深入理解是開發(fā)工作獲得成功的前提條件,它對(duì)目標(biāo)項(xiàng)目提出完整、準(zhǔn)確、清晰、具體的要求。</p><p>

52、<b>  軟件的功能需求:</b></p><p><b>  1、登錄功能。</b></p><p>  2、申請(qǐng)新用戶的功能。</p><p>  3、客戶可以通過(guò)服務(wù)器轉(zhuǎn)發(fā),實(shí)現(xiàn)一對(duì)一的聊天。</p><p><b>  4、顯示在線好友。</b></p>

53、<p>  5、服務(wù)器顯示所有用戶及狀態(tài)。</p><p>  6、服務(wù)器端可以保存用戶的信息,同時(shí)將信息保存在文件和數(shù)據(jù)庫(kù)中。</p><p>  7、客戶端程序可以顯示好友列表。</p><p>  8、應(yīng)該具有易用、穩(wěn)定的圖形界面。</p><p>  9、系統(tǒng)實(shí)現(xiàn)保存聊天記錄的功能。</p><p>

54、;  10、發(fā)送系統(tǒng)消息。</p><p>  11、服務(wù)器端保存錯(cuò)誤日志。</p><p>  12、從數(shù)據(jù)庫(kù)中讀取保存用戶信息。</p><p>  2.2總體性能需求分析</p><p>  2.2.1服務(wù)器端性能需求</p><p>  服務(wù)器需要同時(shí)連接很多個(gè)用戶,并能提供給這些連接用戶所需要的任務(wù)處理請(qǐng)求,

55、這就要求服務(wù)器能同時(shí)處理多個(gè)客戶端連接。</p><p>  服務(wù)器模型一般分為循環(huán)服務(wù)器和并發(fā)服務(wù)器,循環(huán)服務(wù)器一次只能處理一個(gè)連接,也就是說(shuō)同一時(shí)間只能由一個(gè)用戶連接到服務(wù)器進(jìn)行消息處理,這種情況是不被允許的。</p><p>  因此我們將采用多線程方式的并發(fā)服務(wù)器來(lái)設(shè)計(jì)服務(wù)器端,這樣將能從很大程度上提高服務(wù)器的運(yùn)行效率。</p><p>  2.2.2客戶端

56、端性能需求</p><p>  客戶端只需要連接到服務(wù)器便可以進(jìn)行任務(wù)的處理工作,因此客戶端的主要性能要求為圖形界面運(yùn)行的穩(wěn)定性和對(duì)出錯(cuò)信息的及時(shí)反映。</p><p>  當(dāng)一個(gè)窗體出現(xiàn)問(wèn)題時(shí)能夠及時(shí)的處理,讓主程序不受影響。</p><p>  2.2.3錯(cuò)誤處理需求</p><p>  所有的應(yīng)用程序在運(yùn)行過(guò)程中都會(huì)出現(xiàn)出錯(cuò)的情況,這種

57、錯(cuò)誤可能來(lái)自于程序本身的BUG也可能是用戶操作的失誤所造成的。當(dāng)有錯(cuò)誤發(fā)生時(shí),我們應(yīng)該有一個(gè)很好的機(jī)制來(lái)保障錯(cuò)誤能夠及時(shí)地被排除。</p><p>  因此,當(dāng)應(yīng)用程序出現(xiàn)了錯(cuò)誤的時(shí)候我們就需要程序能提供給我們出錯(cuò)的信息,這樣用戶就能夠很快的找出具體的出錯(cuò)原因,以便尋找合理的途徑去解決它。</p><p><b>  3 程序設(shè)計(jì)方案</b></p>

58、<p><b>  3.1方案比較</b></p><p>  3.1.1采用TCP方式連接</p><p>  TCP方式連接的一個(gè)顯著特點(diǎn)就是需要有服務(wù)器,這種類型的程序通常被稱為客戶機(jī)/服務(wù)器模式。</p><p>  客戶機(jī)/服務(wù)器模型也是一種網(wǎng)絡(luò)模型,它并不是定義了網(wǎng)絡(luò)的層次結(jié)構(gòu),而是描述了一種網(wǎng)絡(luò)程序運(yùn)行的方式。</

59、p><p>  客戶及/服務(wù)器模型將網(wǎng)絡(luò)應(yīng)用程序分為客戶和服務(wù)器兩部分??蛻舴綄?duì)服務(wù)器方發(fā)送信息請(qǐng)求,服務(wù)器方對(duì)其做出相應(yīng)回答,提供服務(wù)。在TCP/IP網(wǎng)絡(luò)應(yīng)用中,多數(shù)網(wǎng)絡(luò)應(yīng)用程序是使用客戶/服務(wù)器模型設(shè)計(jì)的。服務(wù)程序通常在一個(gè)眾所周知的地址監(jiān)聽對(duì)服務(wù)的請(qǐng)求,也就是說(shuō),服務(wù)進(jìn)程一直處于休眠狀態(tài),直到一個(gè)客戶程序提出了請(qǐng)求信息。此時(shí),服務(wù)程序被"驚醒"并且為客戶提供服務(wù),對(duì)客戶的請(qǐng)求做出適當(dāng)?shù)姆磻?yīng)。

60、雖然基于連接的服務(wù)是設(shè)計(jì)客戶/服務(wù)器應(yīng)用程序的標(biāo)準(zhǔn),但是通過(guò)運(yùn)用中間件的原理,可以將客戶端和服務(wù)端進(jìn)行解耦合,使二者成為獨(dú)立的一部分,服務(wù)器只需提供一個(gè)servant,而客戶端只需獲取servant的代理,二者就可以進(jìn)行通信,甚至服務(wù)器端和客戶端可以使用不同的語(yǔ)言來(lái)編寫。</p><p>  當(dāng)建立服務(wù)器程序時(shí),應(yīng)該將服務(wù)器程序設(shè)計(jì)成等候客戶的請(qǐng)求。TCP傳輸層通過(guò)協(xié)議端口和應(yīng)用程序通信,也就是說(shuō),為了接收客戶請(qǐng)

61、求,服務(wù)器程序必須對(duì)傳輸層的一個(gè)特定協(xié)議端口進(jìn)行偵聽。</p><p>  同時(shí),客戶與服務(wù)器這兩個(gè)術(shù)語(yǔ)不是對(duì)應(yīng)用的特定組成部分的嚴(yán)格指稱,而是表示在某個(gè)請(qǐng)求從發(fā)生到結(jié)束期間,應(yīng)用的某些部分所承擔(dān)的角色: </p><p>  客戶是主動(dòng)的實(shí)體。它們向服務(wù)器發(fā)出服務(wù)請(qǐng)求。 </p><p>  服務(wù)器是被動(dòng)的實(shí)體。它們提供服務(wù),響應(yīng)客戶請(qǐng)求。 </p>

62、<p>  在從不發(fā)出請(qǐng)求、而只是響應(yīng)請(qǐng)求的意義上,許多服務(wù)器常常不是 “純粹的”服務(wù)器:它們常常充當(dāng)某些客戶的服務(wù)器,但為了完成它們的客戶的請(qǐng)求,它們又會(huì)充當(dāng)另外的服務(wù)器的客戶。與此類似,在只從某個(gè)對(duì)象那里請(qǐng)求服務(wù)的意義上,客戶常常也不是“純粹的”客戶:它們常常是客戶-服務(wù)器混合物。例如,客戶可以在服務(wù)器上啟動(dòng)一個(gè)長(zhǎng)時(shí)間運(yùn)行的操作,在啟動(dòng)該操作時(shí),客戶可以向服務(wù)器提供回調(diào)對(duì)象(callback object ),供服務(wù)器用

63、于在操作完成時(shí)向客戶發(fā)出通知。在這種情況下,客戶在啟動(dòng)操</p><p>  作時(shí)充當(dāng)客戶,而在接收操作完成通知時(shí)充當(dāng)服務(wù)器。這樣的角色反轉(zhuǎn)在許多系統(tǒng)中都很常見,所以許多客戶-服務(wù)器系統(tǒng)常??梢员桓鼫?zhǔn)確地描述為對(duì)等(peer-to-peer )系統(tǒng)。</p><p>  3.1.2采用UDP方式連接</p><p>  采用UDP協(xié)議的程序不需要有服務(wù)器,兩個(gè)程序之

64、間可以通過(guò)無(wú)連接的方式進(jìn)行通信,所以無(wú)連接是使用UDP協(xié)議程序的一個(gè)顯著特點(diǎn)。</p><p>  使用無(wú)連接協(xié)議的程序和使用面向連接協(xié)議的服務(wù)器程序之間的主要相似之處是它們都必須對(duì)一個(gè)協(xié)議端口進(jìn)行偵聽。例如,無(wú)連接和連接服務(wù)器程序必須在協(xié)議端口偵聽客戶請(qǐng)求。同樣,由于無(wú)連接客戶程序沒(méi)有和遠(yuǎn)地主機(jī)建立直接連接,所以它也必須對(duì)協(xié)議端口進(jìn)行偵聽,以便接收以對(duì)它服務(wù)請(qǐng)求產(chǎn)生的數(shù)據(jù)報(bào)應(yīng)答。</p><

65、p>  無(wú)連接客戶程序也對(duì)一個(gè)協(xié)議端口進(jìn)行偵聽。使用無(wú)連接協(xié)議的程序不和遠(yuǎn)地主機(jī)建立直接連接。無(wú)連接客戶程序使用數(shù)據(jù)報(bào)發(fā)送網(wǎng)絡(luò)服務(wù)請(qǐng)求,它不建立點(diǎn)到點(diǎn)連接。因此無(wú)連接客戶程序必須在一個(gè)協(xié)議端口,對(duì)應(yīng)答數(shù)據(jù)報(bào)進(jìn)行偵聽。</p><p><b>  3.2方案比較</b></p><p>  綜合以上分析,本軟件開發(fā)選擇方案如下:</p><p&

66、gt;  Linux操作系統(tǒng),采用C++開發(fā)語(yǔ)言,TCP協(xié)議進(jìn)行連接。采用C/S架構(gòu),運(yùn)用ICE中間件連接服務(wù)器和客戶端。系統(tǒng)界面美觀內(nèi)容豐富,很好的實(shí)現(xiàn)了服務(wù)器與用戶、用戶與用戶的交互。</p><p><b>  3.3總體設(shè)計(jì)方案</b></p><p>  為實(shí)現(xiàn)網(wǎng)絡(luò)聊天的功能,服務(wù)器與客戶端采用了TCP/IP和UDP/IP方式連接,在設(shè)計(jì)聊天方案時(shí),實(shí)行將所

67、有信息發(fā)往服務(wù)器端,再由服務(wù)器進(jìn)行分別處理的思路,服務(wù)器端是所有信息的中心。</p><p>  3.3.1服務(wù)器端功能模塊劃分</p><p>  服務(wù)器負(fù)責(zé)向各個(gè)客戶端發(fā)布系統(tǒng)消息。</p><p>  接受來(lái)自客戶端的各種信息并分別處理。</p><p>  針對(duì)這些操作,服務(wù)器做了如下的模塊劃分:</p><p&g

68、t;  處理登陸信息模塊:檢查登陸信息是否正確,并向客戶端返回登陸信息。</p><p>  處理聊天信息模塊:轉(zhuǎn)發(fā)消息給指定的用戶。</p><p>  處理申請(qǐng)信息模塊:通過(guò)用戶申請(qǐng)模塊進(jìn)行新用戶的注冊(cè),保存該用戶信息。</p><p>  發(fā)布系統(tǒng)消息模塊:將消息發(fā)給各客戶端,改寫用戶在服務(wù)器端和客戶端的狀態(tài)。</p><p><

69、b>  服務(wù)器功能示意圖:</b></p><p>  圖3-1 服務(wù)器功能示意圖</p><p>  3.3.2客戶端端功能模塊劃分</p><p>  客戶端主要負(fù)責(zé)處理用戶的操作信息,當(dāng)用戶做出相應(yīng)的動(dòng)作時(shí)客戶端應(yīng)該能夠及時(shí)地做出相應(yīng),當(dāng)GTK圖形程序檢測(cè)到鼠標(biāo)點(diǎn)擊時(shí),將觸發(fā)一個(gè)事件,對(duì)該事件進(jìn)行動(dòng)作的定義和函數(shù)的編寫便可完成相應(yīng)的動(dòng)作。因

70、此,針對(duì)這些操作特性,將客戶端模塊進(jìn)行如下劃分:</p><p>  登陸功能模塊:建立與服務(wù)器的連接并登陸,能顯示登陸錯(cuò)誤信息。</p><p>  界面顯示模塊:將在線好友顯示在好友列表中,并顯示其當(dāng)前狀態(tài)。</p><p>  聊天功能模塊:處理各種聊天信息,并判斷消息類型。</p><p>  修改信息模塊:修改用戶名字密碼。<

71、/p><p>  配置信息模塊:提供基本的軟件配置操作。</p><p><b>  客戶端功能示意圖:</b></p><p>  圖3-2 客戶端功能示意圖</p><p>  3.3.3UDP協(xié)議</p><p>  UDP通訊模式圖如下:</p><p>  Yes

72、 No</p><p>  圖3-3 UDP通信模式圖</p><p>  3.3.4TCP協(xié)議</p><p>  TCP協(xié)議圖如下: </p><p><b>  Server</b></p><p><b

73、>  Client</b></p><p>  圖3-4 TCP通信圖</p><p>  3.3.5消息標(biāo)識(shí)定義</p><p>  消息頭,包含發(fā)送者,信息內(nèi)容,接受者 </p><p>  struct message</p><p><b>  {</b></p&

74、gt;<p>  string sender;</p><p>  string mes;</p><p>  string receiver;</p><p><b>  }</b></p><p>  用戶信息,包含姓名,密碼,號(hào)碼</p><p>  struct userin

75、fo</p><p><b>  {</b></p><p>  string name;</p><p>  string pwd;</p><p>  string no;</p><p><b>  } </b></p><p>  好友列表

76、 </p><p>  sequence < string > frilist</p><p>  消息隊(duì)列 </p><p>  sequence < message > messagelist</p><p>  用戶-用戶信息 </p><p>  dic

77、tionary < string, userinfo > userinfolist</p><p>  系統(tǒng)消息 </p><p>  sequence < message > offlinemessage</p><p>  在線用戶 </p><p>  sequence < stri

78、ng > liveuser</p><p>  3.3.6服務(wù)器接口函數(shù)</p><p>  服務(wù)器接口funcpp,該接口提供以下操作:</p><p><b>  登入系統(tǒng)</b></p><p>  int Logins (string name, string pwd);</p><p&

79、gt;<b>  注冊(cè)用戶</b></p><p>  int Regists (string name, string pwd, string picpath);</p><p><b>  獲取用戶名</b></p><p>  int Getusername (string name);</p><

80、;p><b>  獲取用戶狀態(tài)</b></p><p>  String station()</p><p><b>  獲取好友列表</b></p><p>  frilist Retfrilist(string name);</p><p><b>  新增加用戶</b&g

81、t;</p><p>  int Addfriend(string name,string friname);</p><p><b>  退出用戶</b></p><p>  int Delfriend(string name,string friname);</p><p><b>  將用戶信息寫入文件&

82、lt;/b></p><p>  int Writeofflinemesfile();</p><p><b>  讀取文件中用戶信息</b></p><p>  offlinemessage Readofflinemesfile();</p><p><b>  發(fā)送消息</b></p

83、><p>  int Sendmessage(string recverrname,string sendername,string message,string sendtime);</p><p>  sendtime);</p><p>  獲取是否在線 </p><p>  int Getstat(string name);<

84、;/p><p>  添加日志 </p><p>  void writelog(string s);</p><p>  用戶在線 </p><p>  int Loginser(string name); </p><p>  4 即時(shí)通訊系統(tǒng)軟件詳細(xì)設(shè)計(jì)</p><p

85、>  4.1服務(wù)器端設(shè)計(jì)思想</p><p>  本系統(tǒng)軟件產(chǎn)品的主要功能是實(shí)現(xiàn)網(wǎng)上聊天,可以讓多個(gè)用戶同時(shí)互相通信,有一個(gè)服務(wù)器,用于檢查客戶登陸請(qǐng)求,轉(zhuǎn)發(fā)客戶所發(fā)出的消息,并負(fù)責(zé)刪除退出的用戶。對(duì)服務(wù)器的某一可用端口進(jìn)行監(jiān)聽,以獲得客戶端請(qǐng)求,從而對(duì)客戶端請(qǐng)求進(jìn)行處理。因?yàn)槭嵌嗫蛻敉瑫r(shí)請(qǐng)求,所以要采用多線程,為每一個(gè)在線用戶分配一個(gè)線程,實(shí)時(shí)處理每個(gè)客戶端的請(qǐng)求。服務(wù)器端要求實(shí)現(xiàn)公共數(shù)據(jù)處理,處理公共數(shù)

86、據(jù),客戶數(shù)據(jù)資料的存儲(chǔ)與讀取,聊天記錄資料的存取和讀取等。端口監(jiān)聽器,監(jiān)聽服務(wù)器某一端口,為每一在線客戶建立一個(gè)會(huì)話線程??蛻粽?qǐng)求處理處理客戶的請(qǐng)求,根據(jù)客戶的請(qǐng)求執(zhí)行相應(yīng)的操作。</p><p>  服務(wù)器運(yùn)行后即處于監(jiān)聽狀態(tài),當(dāng)監(jiān)聽到有連接請(qǐng)求時(shí)服務(wù)器進(jìn)入消息處理流程,因?yàn)榉?wù)器為并發(fā)服務(wù)器,所以可以同時(shí)對(duì)多個(gè)請(qǐng)求做出相應(yīng)。</p><p>  由于服務(wù)器與客戶端是相互獨(dú)立的,啟動(dòng)服務(wù)

87、器后,服務(wù)器等待客戶端與之相連,同時(shí),服務(wù)器本身可以做相應(yīng)的操作:從數(shù)據(jù)庫(kù)讀取用戶信息、從文件中讀取用戶信息、將用戶信息保存到數(shù)據(jù)庫(kù)中(當(dāng)有新用戶注冊(cè)時(shí))、用戶信息保存到文件中(當(dāng)有新用戶注冊(cè)時(shí))。</p><p>  服務(wù)器工作方式簡(jiǎn)圖如下:</p><p>  圖4-1 服務(wù)器工作方式簡(jiǎn)圖</p><p>  4.2客戶端設(shè)計(jì)思想</p><

88、;p>  本系統(tǒng)軟件產(chǎn)品的主要功能是實(shí)現(xiàn)網(wǎng)上聊天,可以讓多個(gè)用戶同時(shí)互相通信,有一個(gè)服服務(wù)器,用于檢查客戶登陸請(qǐng)求,轉(zhuǎn)發(fā)客戶所發(fā)出的消息,并負(fù)責(zé)刪除退出的用戶.服務(wù)器任務(wù)為從數(shù)據(jù)庫(kù)讀取用戶信息、從文件中讀取用戶信息、將用戶信息保存到數(shù)據(jù)庫(kù)中(當(dāng)有新用戶注冊(cè)時(shí))、用戶信息保存到文件中(當(dāng)有新用戶注冊(cè)時(shí))。其主要是在后臺(tái)工作。</p><p>  而對(duì)于客戶端,其主要的功能是實(shí)現(xiàn)用戶之間的通信,用穩(wěn)定的圖形化界

89、面表示客戶端,以便直觀的進(jìn)行通信??蛻舳税韵陆缑妫旱顷懡缑妗⒊绦蛑鞔翱?、聊天界面、注冊(cè)用戶界面、彈出離線消息窗口、添加刪除好友窗口。</p><p>  下圖為客戶端前臺(tái)窗口工作方式簡(jiǎn)圖:</p><p>  圖4-2 客戶端前臺(tái)窗口工作方式簡(jiǎn)圖</p><p>  客戶端運(yùn)行后首先要用戶登錄到服務(wù)器,如果登陸成功服務(wù)器會(huì)將在線的用戶聯(lián)系人列表發(fā)送給客戶端,此

90、時(shí)客戶端即可顯示有哪些好友在線而哪些是離線的。當(dāng)用戶點(diǎn)擊在線好友時(shí)便會(huì)彈出一個(gè)聊天信息窗體,該窗體用于發(fā)送和接收用戶的聊天信息。當(dāng)用戶點(diǎn)擊離線用戶時(shí)便會(huì)觸發(fā)一個(gè)離線消息事件,該事件通過(guò)服務(wù)器轉(zhuǎn)發(fā)方式發(fā)送給離線用戶,當(dāng)對(duì)方上線時(shí)便可查看該離線消息。</p><p>  服務(wù)器程序啟動(dòng)后,如服務(wù)器流程圖所示,通過(guò)雙線程,同時(shí)啟動(dòng)ICE的Server端和ICE的Client端,服務(wù)器的Server端用來(lái)等待客戶端的Cl

91、ient連接,服務(wù)器的Client端用來(lái)連接客戶端的Server端。</p><p>  啟動(dòng)客戶端,通過(guò)IP和端口號(hào)連接上服務(wù)器的Server端,同時(shí)客戶端啟動(dòng)自身的Server端,此時(shí)服務(wù)器的Client端連接客戶端的Server端,此時(shí),客戶端與服務(wù)器之間建立了連接。</p><p>  客戶端服務(wù)器連接后,服務(wù)器通過(guò)創(chuàng)建通信器以及適配器,并在通信器中建立Servant以便客戶端調(diào)用

92、。</p><p>  下圖為服務(wù)器和客戶端之間連接方式(ICE的C/S連接)的簡(jiǎn)圖:</p><p>  圖4-3 ICE下服務(wù)器和客戶端工作方式簡(jiǎn)圖</p><p>  客戶端后臺(tái)工作方式簡(jiǎn)圖如下:</p><p>  圖4-4 客戶端后臺(tái)工作方式簡(jiǎn)圖</p><p>  4.3服務(wù)器端詳細(xì)設(shè)計(jì)</p&g

93、t;<p>  4.3.1服務(wù)器端主體</p><p>  服務(wù)器主體函數(shù)主要涉及是創(chuàng)建兩個(gè)線程,一個(gè)是Server端線程,一個(gè)Clinet端線程。</p><p>  Server端線程負(fù)責(zé)提供連接,供客戶端的Client端連接;</p><p>  Client端負(fù)責(zé)連接Client端。</p><p><b> 

94、 創(chuàng)建兩個(gè)新線程:</b></p><p>  IceUtil::ThreadPtr st = new serverthread;</p><p>  IceUtil::ThreadPtr ct = new clientthread;</p><p><b>  啟動(dòng)線程:</b></p><p>  Ice

95、Util::ThreadControl tst = st->start();</p><p>  IceUtil::ThreadControl tct = ct->start();</p><p>  4.3.2服務(wù)器端線程實(shí)現(xiàn)</p><p>  服務(wù)器有兩個(gè)類serverthread和clientthread,繼承自基類IceUtil::Thread

96、,兩個(gè)類的public的run()方法用來(lái)啟動(dòng)ICE線程。</p><p>  serverthread類的run方法完成工作是:初始化通信器,創(chuàng)建適配器,建立Servant,將Servant加入通信器,激活通信器,然后等待連接,同時(shí)完成工作后關(guān)閉通信器。</p><p>  clientthread類的run方法完成的工作是:初始化通信器,創(chuàng)建適配器,建立server端的代理,查找相應(yīng)的

97、Servant代理,通過(guò)代理調(diào)用相應(yīng)接口。</p><p>  在clientthread類的run方法中,通過(guò)代理調(diào)用相應(yīng)的接口函數(shù),加上選擇機(jī)制,可以完成服務(wù)器端的四個(gè)功能:從數(shù)據(jù)庫(kù)讀取用戶信息、從文件中讀取用戶信息、將用戶信息保存到數(shù)據(jù)庫(kù)中(當(dāng)有新用戶注冊(cè)時(shí))、用戶信息保存到文件中(當(dāng)有新用戶注冊(cè)時(shí))。</p><p>  在服務(wù)器和客戶端連接時(shí),二者相連的端口號(hào)直接寫入了配置文件,

98、這樣就無(wú)需用硬寫入的方式在程序中就寫入連接的IP和端口號(hào),從而方便了我們以后可以修改,而不必改變整個(gè)程序,ICE的配置文件的方式提供了這樣的方便。</p><p>  Ice 屬性機(jī)制提供了一種簡(jiǎn)單的配置 Ice 的途徑,你可以在配置文件中、或在命令行上設(shè)置屬性。這也適用于你自己的應(yīng)用:你可以輕松地使用Properties接口,訪問(wèn)你為自己的需要而創(chuàng)建的、應(yīng)用專用的屬性。用于訪問(wèn)屬性值的 API 小而簡(jiǎn)單,所以要

99、在運(yùn)行時(shí)用它獲取屬性值很容易;這個(gè) API 還很靈活,如果有需要,它能讓你使用多個(gè)不同的屬性集和配置文件。</p><p>  4.3.3服務(wù)器端函數(shù)實(shí)現(xiàn)</p><p>  服務(wù)器端提供以下函數(shù)的實(shí)現(xiàn):</p><p><b>  登入系統(tǒng)</b></p><p>  int Logins (string name,

100、string pwd);</p><p><b>  注冊(cè)用戶</b></p><p>  int Regists (string name, string pwd, string picpath);</p><p><b>  獲取用戶名</b></p><p>  int Getusername

101、 (string name);</p><p><b>  獲取用戶頭像</b></p><p>  string Getfripic(string name);</p><p><b>  獲取好友列表</b></p><p>  frilist Retfrilist (string name);

102、</p><p><b>  添加好友</b></p><p>  int Addfriend(string name,string friname);</p><p><b>  刪除好友</b></p><p>  int Delfriend(string name,string friname

103、);</p><p><b>  將用戶信息寫入文件</b></p><p>  int Writeofflinemesfile();</p><p><b>  讀取文件中用戶信息</b></p><p>  offlinemessage Readofflinemesfile();</p&g

104、t;<p><b>  發(fā)送消息</b></p><p>  int Sendmessage(string recverrname,string sendername,string message,string sendtime);</p><p><b>  發(fā)送離線消息</b></p><p>  int

105、 Sendofflinemes(string recvername,string sendername,string message,string sendtime);</p><p><b>  獲取消息</b></p><p>  message Getmessage(string recvername,string sendername);</p>

106、<p><b>  獲取是否在線</b></p><p>  int Getstat(string name);</p><p><b>  獲取消息數(shù)量</b></p><p>  int Getmessagenum();</p><p><b>  獲取系統(tǒng)消息數(shù)量<

107、/b></p><p>  int Getsysnum();</p><p><b>  獲取系統(tǒng)消息</b></p><p>  message Getsysmessage(string recvername);</p><p><b>  獲取當(dāng)前時(shí)間</b></p><

108、;p>  char* currenttime(char* curtime, const char* format);</p><p><b>  添加日志</b></p><p>  void writelog(string s);</p><p>  用戶在線 </p><p>  int Log

109、inser(string name); </p><p>  離線用戶 </p><p>  int Logoutser(string name);</p><p>  4.4客戶端圖形界面詳細(xì)設(shè)計(jì)</p><p>  即時(shí)通信軟件的客戶端是使用圖形用戶界面來(lái)實(shí)現(xiàn)的,程序運(yùn)行后激活主窗體,在主窗體上點(diǎn)擊設(shè)置為敏感狀態(tài)的按鈕就

110、會(huì)產(chǎn)生相應(yīng)的事件,該事件將會(huì)觸發(fā)一個(gè)消息驅(qū)動(dòng)所指定的函數(shù)來(lái)處理這個(gè)操作。</p><p>  本軟件使用QT圖形界面來(lái)實(shí)現(xiàn),其具有以下優(yōu)點(diǎn):</p><p>  面向?qū)ο螅篞t 的良好封裝機(jī)制使得 Qt 的模塊化程度非常高,可重用性較好,對(duì)于用戶開發(fā)來(lái)說(shuō)是非常 方便的。Qt 提供了一種稱為signals/slots 的安全類型來(lái)替代 callback,這使得各個(gè)元件之間的協(xié)同工作變得十分簡(jiǎn)

111、單;</p><p>  豐富的API:Qt包括多達(dá) 250個(gè)以上的 C++ 類,還提供基于模板的 collections, serialization, file, I/O device, directory management, date/time 類。</p><p>  登陸界面的設(shè)計(jì)是整個(gè)客戶端的切入點(diǎn),客戶端的整個(gè)設(shè)計(jì)都是在圖形界面下完成的。</p><p

112、>  圖形用戶界面或圖形用戶接口(Graphical User Interface,GUI)是指采用圖形方式顯示的計(jì)算機(jī)操作環(huán)境用戶接口。與早期計(jì)算機(jī)使用的命令行界面相比,圖形界面對(duì)于用戶來(lái)說(shuō)更為簡(jiǎn)便易用。GUI的廣泛應(yīng)用是當(dāng)今計(jì)算機(jī)發(fā)展的重大成就之一,它極大地方便了非專業(yè)用戶的使用人們從此不再需要死記硬背大量的命令,取而代之的是可用通過(guò)窗口、菜單、按鍵等方式來(lái)方便地進(jìn)行操作。而嵌入式GUI具有下面幾個(gè)方面的基本要求:輕型、占用資

113、源少、高性能、高可靠性、便于移植、可配置等特點(diǎn)。</p><p>  圖形界面穩(wěn)定實(shí)用是前提,在穩(wěn)定的前提下要力求做好美觀,簡(jiǎn)潔,客戶端通過(guò)創(chuàng)建圖形界面,并通過(guò)代理調(diào)用服務(wù)器中的接口,再運(yùn)用QT的機(jī)制,通過(guò)點(diǎn)擊按鈕等方式獲取相應(yīng)響應(yīng),從而實(shí)現(xiàn)相應(yīng)操作。</p><p><b>  4.4.1連接窗體</b></p><p>  連接窗體的實(shí)現(xiàn)如

114、下:</p><p>  在連接窗體中,有兩個(gè)Button(按鈕(下同))和兩個(gè)LineEdit。</p><p>  IP對(duì)應(yīng)的LineEdit響應(yīng)SaveIp函數(shù),用以保存Ip地址。</p><p><b>  其實(shí)現(xiàn)如下:</b></p><p>  void MainWindow::SaveIp()</p&

115、gt;<p><b>  {</b></p><p>  QString qip;</p><p>  qip.append(ui->text1->text());</p><p>  serip= qip.toStdString();</p><p><b>  }</b>

116、;</p><p>  Port對(duì)應(yīng)的LineEdit響應(yīng)SavePort函數(shù),用以保存Port號(hào)。</p><p><b>  其實(shí)現(xiàn)如下:</b></p><p>  void MainWindow::SavePort()</p><p><b>  {</b></p><p

溫馨提示

  • 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ù)僅提供信息存儲(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)論