基于eclipse平臺(tái)的即時(shí)通信設(shè)計(jì)及開(kāi)發(fā)_第1頁(yè)
基于eclipse平臺(tái)的即時(shí)通信設(shè)計(jì)及開(kāi)發(fā)_第2頁(yè)
基于eclipse平臺(tái)的即時(shí)通信設(shè)計(jì)及開(kāi)發(fā)_第3頁(yè)
基于eclipse平臺(tái)的即時(shí)通信設(shè)計(jì)及開(kāi)發(fā)_第4頁(yè)
基于eclipse平臺(tái)的即時(shí)通信設(shè)計(jì)及開(kāi)發(fā)_第5頁(yè)
已閱讀5頁(yè),還剩35頁(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、北京聯(lián)合大學(xué)畢業(yè)設(shè)計(jì)畢 業(yè) 設(shè) 計(jì)題目:基于Eclipse平臺(tái)的即時(shí)通信的設(shè)計(jì)與開(kāi)發(fā)姓 名: 馬 文 強(qiáng) 學(xué) 號(hào): 2012080331087 學(xué) 院: 信息學(xué)院 專 業(yè): 通信工程 指 導(dǎo) 教 師: 陳 明 協(xié)助指導(dǎo)教師: 2016年 5月 10日6北京聯(lián)合大學(xué)本科畢業(yè)設(shè)計(jì)(論文)誠(chéng)信承諾書(shū) 本人慎重承諾和聲明,在畢業(yè)設(shè)計(jì)(論文)活動(dòng)中遵守學(xué)校有關(guān)規(guī)定,恪守學(xué)術(shù)規(guī)范,在本人的畢業(yè)設(shè)計(jì)(論文)內(nèi)容除特別注明和引用外,均為本人觀點(diǎn),不存在剽竊、抄襲他人的學(xué)術(shù)觀點(diǎn)、思想和成果,不存在偽造、篡改實(shí)驗(yàn)數(shù)據(jù)。如有違規(guī)行為發(fā)生我愿承擔(dān)一切責(zé)任,接受學(xué)校的處理,并承擔(dān)相應(yīng)的法律責(zé)任。學(xué)生(簽名): 年 月

2、日摘 要即時(shí)通信就是能夠通過(guò)軟件來(lái)與好友進(jìn)行通訊,發(fā)送或者接受好友通過(guò)互聯(lián)網(wǎng)消息,主要是完成點(diǎn)對(duì)多點(diǎn)的通信?,F(xiàn)在因?yàn)榫W(wǎng)絡(luò)的不斷發(fā)展,在全世界人與人之間的距離越來(lái)越短,怎樣與別人之間可以更好更方便快捷地交流,這個(gè)問(wèn)題已經(jīng)是我們?cè)絹?lái)越關(guān)心的問(wèn)題。我們現(xiàn)在生活中有許許多多的網(wǎng)站,他們已經(jīng)很好的融入我們的生活。我們可以通過(guò)網(wǎng)站發(fā)出自己的遇到的實(shí)時(shí)動(dòng)態(tài),與朋友之間可以更好地交流,和我們的公司的客戶可以建立良好的互動(dòng)。所以說(shuō)開(kāi)發(fā)一個(gè)聊天軟件的必要性越來(lái)越高,開(kāi)發(fā)這么一個(gè)交流的平臺(tái)這就是我這次設(shè)計(jì)的目標(biāo)。本文主要是基于eclipse平臺(tái)下的能夠完成即時(shí)通信的聊天軟件,本文重點(diǎn)分析了軟件的客戶端與服務(wù)器的建立

3、過(guò)程,將點(diǎn)對(duì)點(diǎn)通信融入到了其中,在eclipse平臺(tái)下的Java開(kāi)發(fā)技術(shù)基礎(chǔ)上將以上技術(shù)融入到其中,在熟練的掌握了eclipse平臺(tái)下的開(kāi)發(fā)技術(shù)、服務(wù)器端采用了MySQL數(shù)據(jù)庫(kù)、C/S模型、Socket編程技術(shù)、Winsock網(wǎng)絡(luò)編程接口等技術(shù)的運(yùn)用的基礎(chǔ)上,進(jìn)行網(wǎng)頁(yè)界面的制作,將Web與服務(wù)器端的數(shù)據(jù)庫(kù)緊密聯(lián)系起來(lái)。實(shí)現(xiàn)了應(yīng)用的動(dòng)態(tài)管理。完成了軟件的開(kāi)發(fā)并且對(duì)開(kāi)發(fā)過(guò)程進(jìn)行描述和注釋,并且對(duì)服務(wù)器和客戶端進(jìn)行了測(cè)試。關(guān)鍵字:java mysql javaWebserver C/S模型 Socket編程技術(shù)AbstractInstant communication is to be able t

4、o communicate with friends by software, and friends to send or receive messages via the Internet, mainly complete point to multipoint communication. Now because of network development, in the miles of space that intervene between a man and the world more and more short, how can better and more conve

5、nient and quick communication between with others, the problem is we more and more concern. We now live in there are many sites, they have very good into our lives. We can through the real-time dynamic website issued their own encountered, and can better communication between friends, and our compan

6、y's customers can establish a good interaction. So to develop a chat software is higher and higher, the necessity of developing such a communication platform that is I the design goal.This paper is based on the eclipse platform can complete instant messaging chat software, this paper analyzes th

7、e software process of the establishment of the client and the server will be point to point communication into the among them, the technology of Java development in eclipse platform based technology to the above, in the development of skilled master the eclipse platform technology, USES the MySQL da

8、tabase on the server, C/S model, Socket programming technology, Winsock network programming interface, on the basis of the use of technologies such as Web interface, a Web closely connect to the server database. The application of dynamic management. Completed the software development and the develo

9、pment process is described and comment, and to the server and the client was tested Key words:java mysql javaWebserver C/Smodle Socket目 錄摘 要IAbstractII引言11 緒論211即時(shí)通信的發(fā)展背景21.2 即時(shí)通信現(xiàn)狀21.3 本課題研究?jī)?nèi)容31.4 本論文的主要內(nèi)容32即時(shí)通信系統(tǒng)開(kāi)發(fā)環(huán)境和關(guān)鍵技術(shù)42.1 即時(shí)通信開(kāi)發(fā)環(huán)境42.2 關(guān)鍵技術(shù)42.2.1 java語(yǔ)言42.2.2 WINDOWS SOCKETS網(wǎng)絡(luò)編程接口42.2.3 WSAAsyn

10、cSelect模型開(kāi)發(fā)52.2.4 TCP/IP協(xié)議、TCP協(xié)議62.2.5 Client/Server結(jié)構(gòu)(客戶機(jī)/服務(wù)器模式)83即時(shí)通信系統(tǒng)分析與設(shè)計(jì)93.1 即時(shí)通信系統(tǒng)分析93.1.1 系統(tǒng)需求93.1.2 需求分析103.2 即時(shí)通信系統(tǒng)設(shè)計(jì)113.2.1 設(shè)計(jì)原則113.2.3 工作流程113.2.4 功能設(shè)計(jì)123.2.5 共享數(shù)據(jù)類設(shè)計(jì)134即時(shí)通信系統(tǒng)實(shí)現(xiàn)164.1 服務(wù)器端設(shè)計(jì)實(shí)現(xiàn)164.1.1 服務(wù)器端靜態(tài)類圖164.1.2 服務(wù)器主要類介紹164.1.3 服務(wù)器端主要過(guò)程介紹194.2 客戶端設(shè)計(jì)實(shí)現(xiàn)234.2.1 客戶端靜態(tài)類圖234.2.2 客戶端主要類介紹234

11、.2.3客戶端主要過(guò)程介紹254.3系統(tǒng)測(cè)試284.3.1 測(cè)試意義284.3.2軟件測(cè)試的目標(biāo)284.3.2軟件測(cè)試的方法284.3.3 測(cè)試用例29總結(jié)與展望31致 謝33參考文獻(xiàn)34III引 言即時(shí)通信就是能夠通過(guò)軟件來(lái)與好友進(jìn)行通訊,發(fā)送或者接受好友通過(guò)互聯(lián)網(wǎng)消息,主要是完成點(diǎn)對(duì)多點(diǎn)的通信?,F(xiàn)在因?yàn)榫W(wǎng)絡(luò)的不斷發(fā)展,在全世界人與人之間的距離越來(lái)越短,怎樣與別人之間可以更好更方便快捷地交流,這個(gè)問(wèn)題已經(jīng)是我們?cè)絹?lái)越關(guān)心的問(wèn)題。我們現(xiàn)在生活中有許許多多的網(wǎng)站,他們已經(jīng)很好的融入我們的生活。我們可以通過(guò)網(wǎng)站發(fā)出自己的遇到的實(shí)時(shí)動(dòng)態(tài),與朋友之間可以更好地交流,和我們的公司的客戶可以建立良好的互動(dòng)

12、。所以說(shuō)開(kāi)發(fā)一個(gè)聊天軟件的必要性越來(lái)越高,開(kāi)發(fā)這么一個(gè)交流的平臺(tái)這就是我這次設(shè)計(jì)的目標(biāo)。在現(xiàn)代這個(gè)社會(huì)隨著互聯(lián)網(wǎng)的快速發(fā)展,大家需要在網(wǎng)上越來(lái)越多的溝通。所以應(yīng)運(yùn)而生許許多多的聊天軟件,來(lái)幫助我們就行實(shí)時(shí)的信息交流。就目前的情況來(lái)看,我們國(guó)家的網(wǎng)絡(luò)發(fā)展不斷提高我們公司的內(nèi)部網(wǎng)絡(luò)也基本上建設(shè)完成了。我們想要快輸?shù)慕鉀Q我們?cè)诠臼聞?wù)上遇到的問(wèn)題,許許多多的企業(yè)開(kāi)始在公司的內(nèi)部建立屬于自己的內(nèi)部網(wǎng)絡(luò)來(lái)開(kāi)展工作。在內(nèi)網(wǎng)的成功運(yùn)行過(guò)程中,公司通過(guò)家屬內(nèi)部員工的協(xié)調(diào)與交流,加快信息的交換速度,得以提高自己的工作效率。但是隨之也產(chǎn)生了很多問(wèn)題,公司的規(guī)模逐步地增大,業(yè)務(wù)也不斷的擴(kuò)展,公司消息的機(jī)密性越來(lái)越強(qiáng)

13、,公司開(kāi)始覺(jué)得需要用內(nèi)網(wǎng)來(lái)交流,避免公司內(nèi)部的機(jī)密泄露。要如何解決這個(gè)我們?cè)谏鐣?huì)發(fā)展中遇到的問(wèn)題,于是人們產(chǎn)生了開(kāi)發(fā)專門(mén)公司內(nèi)部使用的用于聊天的軟件,通過(guò)自己的軟件,公司可以通過(guò)這個(gè)軟件來(lái)傳輸實(shí)時(shí)消息和召開(kāi)網(wǎng)絡(luò)視頻會(huì)議等等這樣可以提高我們的工作效率還能保護(hù)公司的一些商業(yè)秘密。1 緒論1.1即時(shí)通信的發(fā)展背景在現(xiàn)代這個(gè)社會(huì)隨著互聯(lián)網(wǎng)的快速發(fā)展,大家需要在網(wǎng)上越來(lái)越多的溝通。所以應(yīng)運(yùn)而生許許多多的聊天軟件,來(lái)幫助我們就行實(shí)時(shí)的信息交流。就目前的情況來(lái)看,我們國(guó)家的網(wǎng)絡(luò)發(fā)展不斷提高我們公司的內(nèi)部網(wǎng)絡(luò)也基本上建設(shè)完成了。我們想要快輸?shù)慕鉀Q我們?cè)诠臼聞?wù)上遇到的問(wèn)題,許許多多的企業(yè)開(kāi)始在公司的內(nèi)部建立屬

14、于自己的內(nèi)部網(wǎng)絡(luò)來(lái)開(kāi)展工作。在內(nèi)網(wǎng)的成功運(yùn)行過(guò)程中,公司通過(guò)家屬內(nèi)部員工的協(xié)調(diào)與交流,加快信息的交換速度,得以提高自己的工作效率。但是隨之也產(chǎn)生了很多問(wèn)題,公司的規(guī)模逐步地增大,業(yè)務(wù)也不斷的擴(kuò)展,公司消息的機(jī)密性越來(lái)越強(qiáng),公司開(kāi)始覺(jué)得需要用內(nèi)網(wǎng)來(lái)交流,避免公司內(nèi)部的機(jī)密泄露。要如何解決這個(gè)我們?cè)谏鐣?huì)發(fā)展中遇到的問(wèn)題,于是人們產(chǎn)生了開(kāi)發(fā)專門(mén)公司內(nèi)部使用的用于聊天的軟件,通過(guò)自己的軟件,公司可以通過(guò)這個(gè)軟件來(lái)傳輸實(shí)時(shí)消息和召開(kāi)網(wǎng)絡(luò)視頻會(huì)議等等這樣可以提高我們的工作效率還能保護(hù)公司的一些商業(yè)秘密。 現(xiàn)在我們要做一個(gè)基于Socket通信的一個(gè)具有在線聊天和發(fā)送離線消息的聊天軟件。這個(gè)通信基礎(chǔ)是我們可以

15、擁有一個(gè)安全,優(yōu)秀和快速的通信機(jī)制。這個(gè)軟件不需要硬件上的改造和擴(kuò)展,為我們大大的節(jié)約成本。這個(gè)軟件也可以減少網(wǎng)絡(luò)帶寬,提高我們的網(wǎng)絡(luò)帶寬的利用率,再次基礎(chǔ)上可以完成我們的需求。Socket通信軟件在各個(gè)方面的前景也是非常廣闊的,比如在線的網(wǎng)絡(luò)教學(xué),視頻會(huì)議等等。Socket通信接受消息和發(fā)送消息的速度比較快,對(duì)消息的保護(hù)性能比一般比較好,并且不怎么占網(wǎng)絡(luò)帶寬。所以聊天軟件的開(kāi)發(fā)中對(duì)socket的應(yīng)用是很有必要的。 這個(gè)聊天軟件的發(fā)展前景也是很有前途的,不但對(duì)新型的網(wǎng)絡(luò)通信需求也有恒大的擴(kuò)展,也能對(duì)傳統(tǒng)的消息進(jìn)行處理,比如網(wǎng)絡(luò)在線的教育,數(shù)字?jǐn)?shù)據(jù)影音視屏的傳輸?shù)鹊那巴径际遣豢上蘖康?,所以說(shuō)我們

16、還是比較看好他的發(fā)展前景。 1.2 即時(shí)通信現(xiàn)狀對(duì)于即時(shí)通信軟件的開(kāi)發(fā)與研究,已經(jīng)是我們現(xiàn)在生活中補(bǔ)課缺少的一部分,例如QQ、微信、微博以及各種社交軟件。他們現(xiàn)在也實(shí)現(xiàn)了許多各具特色的功能,比如就騰訊公司開(kāi)發(fā)出的QQ而言,有許多附加產(chǎn)品構(gòu)成了一個(gè)完整的產(chǎn)業(yè)鏈最基礎(chǔ)的有聊天軟件,不但可以進(jìn)行文字聊天,還能視頻聊天,語(yǔ)音聊天,多人會(huì)議模式,他們也開(kāi)發(fā)了不少的快捷功能例如使用Ctrl+Alt+A可以在電腦屏幕上面快速截圖。還有QQ空間、QQ游戲以及各種大型游戲的合作開(kāi)發(fā)。使他站在國(guó)內(nèi)這一領(lǐng)域的最前端,后續(xù)他們還退了微信以微信紅包和朋友圈迅速占據(jù)了市場(chǎng),目前已經(jīng)做得比較成功了。與此同時(shí)在國(guó)內(nèi)市場(chǎng)。新浪

17、微博也在國(guó)內(nèi)市場(chǎng)占領(lǐng)了比較大的份額,他們是目前國(guó)內(nèi)來(lái)說(shuō)即時(shí)通信軟件開(kāi)發(fā)的一個(gè)典范和目標(biāo),它大大的豐富了我們的生活,他們可以迅速的將消息傳遍全國(guó)各地,也產(chǎn)生了不少的網(wǎng)絡(luò)紅人,也是他們成功的重要的推動(dòng)因素。目前這些開(kāi)發(fā)的方式還出于保密階段,并不適合所有公司使用。但我想他們大致的目標(biāo)和方向是一定的,就是利用各個(gè)開(kāi)發(fā)平臺(tái)上的的communication interface。是基于TCP協(xié)議來(lái)完成的軟件,這個(gè)協(xié)議在軟件開(kāi)發(fā)中應(yīng)用是很廣泛的。1.3 本課題研究?jī)?nèi)容我們的課題是eclipse平臺(tái)下的應(yīng)用java語(yǔ)言開(kāi)發(fā)的軟件、我們的這個(gè)軟件是由客戶端程序、服務(wù)器端程序以及服務(wù)器端的數(shù)據(jù)庫(kù)的搭建這三部分構(gòu)成的

18、,我們這個(gè)課題主要為了實(shí)現(xiàn)在不同客戶端之間的互相通信,以及發(fā)送離線文字消息,還有對(duì)好友的一些簡(jiǎn)單的操作。主要研究開(kāi)發(fā)內(nèi)容是:學(xué)會(huì)java程序開(kāi)發(fā),學(xué)習(xí)多線程開(kāi)發(fā)技術(shù),搭建eclipse開(kāi)發(fā)平臺(tái)來(lái)做我們的編程,在mysql上搭建所需要的數(shù)據(jù)庫(kù)。探索在eclipse平臺(tái)下,如何使用Socket編程、TCP/IP協(xié)議等實(shí)現(xiàn)該軟件的開(kāi)發(fā)和設(shè)計(jì)。1.4 本論文的主要內(nèi)容目前來(lái)看衡量一個(gè)實(shí)時(shí)通信聊天軟件的條件大概有:穩(wěn)定性、擴(kuò)展性。安全性和。所以,我要做的這個(gè)實(shí)時(shí)聊天軟件是在eclipse平臺(tái)上用java語(yǔ)言來(lái)開(kāi)發(fā),研究在該平臺(tái)下的socket通信技術(shù)是我們的關(guān)鍵。使用配置文件作為數(shù)據(jù)管理。為了完成在多個(gè)

19、客戶端之間互相通信,我們?cè)诳蛻舳松献隽擞脩糇?cè)賬號(hào)、登錄界面。具有發(fā)送實(shí)時(shí)及離線消息功能以及對(duì)好友進(jìn)行添加、查找和刪除的功能。本文第1章主要介紹了即時(shí)通信的發(fā)展的背景及意義、課題研究現(xiàn)狀和目前比較流行的成功的產(chǎn)品還有課題內(nèi)容。對(duì)我要做的軟件的功能與要求進(jìn)行了簡(jiǎn)單的描述。本文第 2 章向大家敘述了實(shí)時(shí)聊天系統(tǒng)的開(kāi)發(fā)平臺(tái)和語(yǔ)言以及主要的技術(shù)。本文第 3 章是軟件的分析與設(shè)計(jì)。完成了這個(gè)聊天軟件的需求分析以及對(duì)技術(shù)的理解,對(duì)組成這個(gè)軟件的各個(gè)部分進(jìn)行仔細(xì)的劃分和分析。如何設(shè)計(jì)了這個(gè)聊天軟件的系統(tǒng)和數(shù)據(jù)結(jié)構(gòu)。本文第4章是系統(tǒng)使怎么樣實(shí)現(xiàn),對(duì)各個(gè)功能區(qū)的詳細(xì)執(zhí)行過(guò)程進(jìn)行了分析,各個(gè)功能區(qū)的結(jié)構(gòu)圖接行了介

20、紹。本文第 5 章介紹系統(tǒng)測(cè)試。本文結(jié)尾對(duì)這次設(shè)計(jì)的參考文獻(xiàn)和對(duì)老師的致謝,并且總結(jié)了一下本次設(shè)計(jì)。2 即時(shí)通信系統(tǒng)開(kāi)發(fā)環(huán)境和關(guān)鍵技術(shù) 2.1 即時(shí)通信開(kāi)發(fā)環(huán)境我所設(shè)計(jì)的是一個(gè)面向中小型機(jī)構(gòu)內(nèi)部通信需求的網(wǎng)絡(luò)即時(shí)信息軟件,要在短時(shí)間內(nèi)開(kāi)發(fā)出來(lái)并且要滿足客戶要求,無(wú)論是硬件還是軟件都要選擇合適,要求如下:開(kāi)發(fā)設(shè)備應(yīng)該完備;開(kāi)發(fā)機(jī)器的性能必須穩(wěn)定;操作系統(tǒng)的選擇應(yīng)該適當(dāng);開(kāi)發(fā)出的程序可以在盡可能多的平臺(tái)上運(yùn)行;要求運(yùn)行機(jī)配置盡可能低檔。對(duì)此,我們選擇的硬件環(huán)境和軟件環(huán)境如下: 1、硬件環(huán)境 ·處理器:Intel Pentium PIII或更高處理器 ·內(nèi)存:256MB或更高 開(kāi)

21、發(fā)該系統(tǒng)應(yīng)盡可能采用高檔的硬件。因此,在應(yīng)用時(shí)應(yīng)采用更好的配置。2、軟件環(huán)境 ·操作系統(tǒng):Windows 2000 /Windows XP / Windows 2003 ·開(kāi)發(fā)平臺(tái):eclipse/myeclipse·開(kāi)發(fā)語(yǔ)言:java2.2 關(guān)鍵技術(shù)2.2.1 java語(yǔ)言Java 編程語(yǔ)言的風(fēng)格十分接近C、C+語(yǔ)言。Java是一個(gè)純的面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言,它繼承了 C+ 語(yǔ)言面向?qū)ο蠹夹g(shù)的核心,Java舍棄了C +語(yǔ)言中容易引起錯(cuò)誤的指針(以引用取代)、運(yùn)算符重載(operator overloading)、多重繼承(以接口取代)等特性,增加了垃圾回收器功能

22、用于回收不再被引用的對(duì)象所占據(jù)的內(nèi)存空間,使得程序員不用再為內(nèi)存管理而擔(dān)憂。在 Java SE 1.5 版本中,Java 又引入了泛型編程(Generic Programming)、類型安全的枚舉、不定長(zhǎng)參數(shù)和自動(dòng)裝/拆箱等語(yǔ)言特性。 2.2.2 WINDOWS SOCKETS網(wǎng)絡(luò)編程接口選定WINDOWS平臺(tái)開(kāi)發(fā)網(wǎng)絡(luò)通信程序,可以選擇WINDOWS的SOCKETS編程接口,Windows Sockets是一套開(kāi)放的、支持多種協(xié)議的Windows下的網(wǎng)絡(luò)編程接口。現(xiàn)在的Winsock已經(jīng)基本上實(shí)現(xiàn)了與協(xié)議無(wú)關(guān),你可以使用Winsock來(lái)調(diào)用多種協(xié)議的功能,但較常使用的是TCP/IP協(xié)議。Win

23、dows sockets無(wú)疑是我們進(jìn)行網(wǎng)絡(luò)編程的利器。所有的Windows Sockets實(shí)現(xiàn)都支持流套接口和數(shù)據(jù)報(bào)套接口。應(yīng)用程序調(diào)用Windows Sockets的API實(shí)現(xiàn)相互之間的通訊。Windows Sockets又利用下層的網(wǎng)絡(luò)通訊協(xié)議功能和操作系統(tǒng)調(diào)用實(shí)現(xiàn)實(shí)際的通訊工作。它們之間的關(guān)系如圖2.1所示: 圖2.1 Windows Sockets實(shí)現(xiàn)通訊工作的各層關(guān)系圖2.2.3 WSAAsyncSelect模型開(kāi)發(fā)WSAAsyncSelect()調(diào)用允許應(yīng)用程序程序注冊(cè)一個(gè)或多個(gè)感興趣的網(wǎng)絡(luò)事件。這一API調(diào)用用來(lái)取代探尋網(wǎng)絡(luò)I/O調(diào)用。在select()或非阻塞I/O例程(例如s

24、end()和recv())已經(jīng)被調(diào)用或?qū)⒁徽{(diào)用的情況下都可以使用WSAAsyncSelect()調(diào)用。在這種情況下,在聲明感興趣的網(wǎng)絡(luò)事件時(shí),你必須提供一個(gè)通知時(shí)使用的窗口句柄。那么在你聲明的感興趣的網(wǎng)絡(luò)事件發(fā)生時(shí),對(duì)應(yīng)的窗口將收到一個(gè)基于消息的通知。其過(guò)程如圖2.2所示。應(yīng)用進(jìn)程WSAAsyncSelect線程繼續(xù)運(yùn)行 Recv()復(fù)制數(shù)據(jù)期間阻塞處理數(shù)據(jù) 內(nèi)核 等待數(shù)據(jù)數(shù)據(jù)準(zhǔn)備好復(fù)制數(shù)據(jù)將數(shù)據(jù)復(fù)制到擁護(hù)空間 完成復(fù)制系統(tǒng)調(diào)用返回消息系統(tǒng)調(diào)用返回成功指示圖2.2 WSAAsyncSelect模型2.2.4 TCP/IP協(xié)議、TCP協(xié)議網(wǎng)際協(xié)議IP是TCP/IP的心臟,也是網(wǎng)絡(luò)層中最重要的協(xié)

25、議。 IP層接收由更低層(網(wǎng)絡(luò)接口層例如以太網(wǎng)設(shè)備驅(qū)動(dòng)程序)發(fā)來(lái)的數(shù)據(jù)包,并把該數(shù)據(jù)包發(fā)送到更高層-TCP或UDP層;相反,IP層也把從TCP或UDP層接收來(lái)的數(shù)據(jù)包傳送到更低層。IP數(shù)據(jù)包是不可靠的,因?yàn)镮P并沒(méi)有做任何事情來(lái)確認(rèn)數(shù)據(jù)包是按順序發(fā)送的或者沒(méi)有被破壞。IP數(shù)據(jù)包中含有發(fā)送它的主機(jī)的地址(源地址)和接收它的主機(jī)的地址(目的地址)。如果IP數(shù)據(jù)包中有已經(jīng)封好的TCP數(shù)據(jù)包,那么IP將把它們向上傳送到TCP層。TCP將包排序并進(jìn)行錯(cuò)誤檢查,同時(shí)實(shí)現(xiàn)虛電路間的連接。TCP數(shù)據(jù)包中包括序號(hào)和確認(rèn),所以未按照順序收到的包可以被排序,而損壞的包可以被重傳。UDP與TCP位于同一層,但對(duì)于數(shù)據(jù)

26、包的順序錯(cuò)誤或重發(fā)。因此,UDP不被應(yīng)用于那些使用虛電路的面向連接的服務(wù),UDP主要用于那些面向查詢-應(yīng)答的服務(wù)。TCP和UDP服務(wù)通常有一個(gè)客戶/服務(wù)器的關(guān)系。兩個(gè)系統(tǒng)間的多重連接是這樣相互確認(rèn)并協(xié)調(diào)一致的,TCP或UDP連接唯一地使用每個(gè)信息中的如下四項(xiàng)進(jìn)行確認(rèn): 源IP地址 發(fā)送包的IP地址。 目的IP地址 接收包的IP地址。源端口 源系統(tǒng)上的連接的端口。 目的端口 目的系統(tǒng)上的連接的端口。端口是一個(gè)軟件結(jié)構(gòu),被客戶程序或服務(wù)進(jìn)程用來(lái)發(fā)送和接收信息。一個(gè)端口對(duì)應(yīng)一個(gè)16比特的數(shù)。服務(wù)進(jìn)程通常使用一個(gè)固定的端口,例如,SMTP使用25。這些端口號(hào)是“廣為人知”的,因?yàn)樵诮⑴c特定的主機(jī)或服

27、務(wù)的連接時(shí),需要這些地址和目的地址進(jìn)行通訊,圖如2.3所示。 圖2.3 面向連接的(TCP)連接過(guò)程2.2.5 Client/Server結(jié)構(gòu)(客戶機(jī)/服務(wù)器模式)Client/Server結(jié)構(gòu)(C/S結(jié)構(gòu))是大家熟知的客戶機(jī)和服務(wù)器結(jié)構(gòu)。通過(guò)它可以充分利用兩端硬件環(huán)境的優(yōu)勢(shì),將任務(wù)合理分配到Client端和Server端來(lái)實(shí)現(xiàn),降低了系統(tǒng)的通訊開(kāi)銷(xiāo)。目前大多數(shù)應(yīng)用軟件系統(tǒng)都是Client/Server形式的兩層結(jié)構(gòu)。C/S結(jié)構(gòu)軟件分為客戶機(jī)和服務(wù)器兩層,客戶機(jī)不是毫無(wú)運(yùn)算能力的輸入、輸出設(shè)備,而是具有了一定的數(shù)據(jù)處理和數(shù)據(jù)存儲(chǔ)能力,通過(guò)把應(yīng)用軟件的計(jì)算和數(shù)據(jù)合理地分配在客戶機(jī)和服務(wù)器兩端,可

28、以有效地降低網(wǎng)絡(luò)通信量和服務(wù)器運(yùn)算量。由于服務(wù)器連接個(gè)數(shù)和數(shù)據(jù)通信量的限制,這種結(jié)構(gòu)的軟件適于在用戶數(shù)目不多的網(wǎng)絡(luò)內(nèi)使用。C/S結(jié)構(gòu)的優(yōu)點(diǎn)是能充分發(fā)揮客戶端的處理能力,很多工作可以在客戶端處理后再提交給服務(wù)器。對(duì)應(yīng)的優(yōu)點(diǎn)就是客戶端響應(yīng)速度快。缺點(diǎn)主要有以下幾個(gè):只適用于網(wǎng)絡(luò)。而隨著互聯(lián)網(wǎng)的飛速發(fā)展,移動(dòng)辦公和分布式辦公越來(lái)越普及,這需要我們的系統(tǒng)具有擴(kuò)展性。這種方式遠(yuǎn)程訪問(wèn)需要專門(mén)的技術(shù),同時(shí)要對(duì)系統(tǒng)進(jìn)行專門(mén)的設(shè)計(jì)來(lái)處理分布式的數(shù)據(jù)。3 即時(shí)通信系統(tǒng)分析與設(shè)計(jì) 3.1 即時(shí)通信系統(tǒng)分析3.1.1 系統(tǒng)需求網(wǎng)絡(luò)聊天交流是目前互聯(lián)網(wǎng)提供的主要內(nèi)容。聊天系統(tǒng)有多種實(shí)現(xiàn)方式,類似ICQ屬于一種點(diǎn)對(duì)點(diǎn)的

29、聊天系統(tǒng);還有一種是基于Socket的集中式聊天系統(tǒng),這種聊天系統(tǒng)需要登陸統(tǒng)一的聊天服務(wù)器。在基于Socket的聊天系統(tǒng)中,主要有兩種角色:服務(wù)器和客戶端,不同的客戶端登陸集中式的服務(wù)器,通過(guò)服務(wù)器將一個(gè)客戶端發(fā)出的信息推送到其他所有客戶端?;赟ocket的聊天系統(tǒng)最早實(shí)現(xiàn)是使用網(wǎng)頁(yè)刷新方式,通過(guò)客戶端不斷地自動(dòng)刷新,服務(wù)器端整個(gè)頁(yè)面內(nèi)容下載到客戶端顯示,這種方式的聊天速度慢,而且有刷屏現(xiàn)象,很快被更新的聊天技術(shù)所替代。 聊天系統(tǒng)在客戶端和服務(wù)器之間主要傳送的是文字信息,服務(wù)器端只需要把最近的文字信息推送到客戶端,這樣減少了網(wǎng)絡(luò)傳輸內(nèi)容,節(jié)省了網(wǎng)絡(luò)傳輸?shù)臅r(shí)間,無(wú)疑提高了聊天速度。這種“推”技

30、術(shù)是目前基于Socket聊天系統(tǒng)的主要實(shí)現(xiàn)技術(shù)。在基于Socket的聊天系統(tǒng),客戶端和服務(wù)器必須保持隨時(shí)隨地的連接。這有別于普通Web瀏覽的連接方式。在使用瀏覽器訪問(wèn)服務(wù)器時(shí),先由客戶端發(fā)出HTTP協(xié)議,然后服務(wù)器響應(yīng)處理這個(gè)客戶端的響應(yīng),再返回處理結(jié)果;請(qǐng)求(Request)和響應(yīng)(Response)是一種一對(duì)一的前后因果關(guān)系。而在基于Socket的聊天系統(tǒng)中,客戶端發(fā)出聊天信息的同時(shí),客戶端也在接受服務(wù)器發(fā)送過(guò)來(lái)的其他人的聊天信息,因此,請(qǐng)求和響應(yīng)不存在那種前后對(duì)應(yīng)關(guān)系,是兩種分別獨(dú)立進(jìn)行的進(jìn)程。因?yàn)榉?wù)器任何時(shí)候都可能發(fā)送信息到客戶端,因此,客戶端和服務(wù)器一旦建立連接,必須能讓服務(wù)器在以

31、后發(fā)送中尋找定位到這個(gè)連接。網(wǎng)絡(luò)聊天系統(tǒng)使該系統(tǒng)的用戶能夠通過(guò)客戶端登入到該系統(tǒng),然后直接與系統(tǒng)交互。首先,需啟動(dòng)服務(wù)器,進(jìn)行服務(wù)器的配置,進(jìn)行正確的服務(wù)器配置和數(shù)據(jù)庫(kù)連接并測(cè)試成功后,開(kāi)啟服務(wù)器。接下來(lái),在客戶端,該系統(tǒng)的用戶能夠通過(guò)登陸界面進(jìn)入,然后直接與系統(tǒng)交互,進(jìn)行文字傳送。本系統(tǒng)支持的活動(dòng)列表如下:(1) 配置服務(wù)器,設(shè)置IP及端;(2) 開(kāi)啟服務(wù)器;(3) 對(duì)離線用戶進(jìn)行刪除管理;(4) 用戶登陸系統(tǒng);(5) 用戶與系統(tǒng)交互,進(jìn)行文字傳送;(6) 用戶好友登陸后,自動(dòng)刷新列表;(7) 傳送文字,當(dāng)好友不在線時(shí),發(fā)送離線消息;(8) 上線接收離線消息;3.1.2 需求分析該聊天程序分

32、為服務(wù)器端和課戶端兩個(gè)部分。客戶端實(shí)現(xiàn)功能:(1) 向在線成員發(fā)送消息并接收消息。(2) 更新成員狀態(tài)。當(dāng)其他成員上線或下線時(shí),客戶端及時(shí)更新成員狀態(tài)。(3) 更新成員列表,當(dāng)其他成員加入或者偶成員被刪除時(shí),客戶端及時(shí)更新成員列表。(4) 當(dāng)對(duì)方不在線時(shí),可以向該成員發(fā)送離線消息。(5) 當(dāng)用戶上線時(shí),接受其他用戶的離線消息。(6) 保存聊天記錄。服務(wù)器端實(shí)現(xiàn)功能:(1) 維護(hù)聊天成員列表:包括接受新成員,刪除已有成員。(2) 通知客戶端更新成員狀態(tài)。(3) 通知客戶端更新成員列表。(4) 為離線用戶保存離線消息。(5) 驗(yàn)證密碼。(6) 禁止已登陸用戶再次登陸。(7) 保存用戶信息。(8)

33、為用戶保存離線消息。關(guān)系圖如圖3.1所示:ClientServerClientClientClient更新成員列表成員列表請(qǐng)求應(yīng)答發(fā)送消息圖3.1 關(guān)系功能圖3.2 即時(shí)通信系統(tǒng)設(shè)計(jì)3.2.1 設(shè)計(jì)原則考慮到系統(tǒng)的可重用性和伸縮性,需要將本系統(tǒng)的網(wǎng)絡(luò)通信底層和應(yīng)用系統(tǒng)分離開(kāi)。這樣,基于可重用的網(wǎng)絡(luò)通信層,可以實(shí)現(xiàn)其他各種實(shí)時(shí)性較高的應(yīng)用系統(tǒng)。本系統(tǒng)在架構(gòu)設(shè)計(jì)上將分4個(gè)層次,如圖3.2所示。CAsyncSocketCSocket聊天、游戲等應(yīng)用系統(tǒng)Window Sockets API 圖3.2架構(gòu)層次本系統(tǒng)最底層是Socket通信層,將負(fù)責(zé)客戶端和服務(wù)器之間快速的數(shù)據(jù)交換,它通過(guò)接口層和最上面應(yīng)

34、用層保持實(shí)時(shí)數(shù)據(jù)聯(lián)系。用戶從客戶端進(jìn)入到本系統(tǒng)前,將實(shí)現(xiàn)統(tǒng)一的用戶登錄驗(yàn)證機(jī)制。Socket底層設(shè)計(jì)分兩大部分:協(xié)議設(shè)計(jì)和連接處理設(shè)計(jì):協(xié)議設(shè)計(jì)和連接處理設(shè)計(jì);CSocket層的目的是提供底層和應(yīng)用蹭一個(gè)中介媒體的作用,但是不能設(shè)計(jì)得太復(fù)雜,以免延誤數(shù)據(jù)傳送時(shí)間。3.2.3 工作流程只有充分地了解了聊天程序的工作流程,才能對(duì)整個(gè)系統(tǒng)的理解更加深刻,聊天程序的工作流程如圖3.5所示。加載套接字庫(kù)初始化套接字綁定本地機(jī)到套接字向指定IP地址發(fā)送數(shù)據(jù)關(guān)閉套接字庫(kù)結(jié)束聊天創(chuàng)建線程用于接受數(shù)據(jù)圖3.5聊天程序的工作流程3.2.4 功能設(shè)計(jì)網(wǎng)絡(luò)聊天系統(tǒng)以網(wǎng)絡(luò)內(nèi)的用戶為應(yīng)用對(duì)象,經(jīng)過(guò)各方面需求分析,該系統(tǒng)主

35、要由服務(wù)器端和客戶端兩部分構(gòu)成,各功能模塊如圖3-6所示。局域網(wǎng)聊天系統(tǒng)服務(wù)器客戶端開(kāi)啟服務(wù)器停止服務(wù)器配置服務(wù)器關(guān)閉服務(wù)器發(fā)送離線信息登陸文字傳送接收離線信息用戶管理圖3-6網(wǎng)絡(luò)聊天系統(tǒng)功能模塊圖3.2.5 共享數(shù)據(jù)類設(shè)計(jì)A用戶設(shè)計(jì):1用戶狀態(tài)設(shè)計(jì)客戶端與服務(wù)器端都擁有成員列表。該程序?qū)⒊蓡T列表設(shè)計(jì)為三種狀態(tài)登陸狀態(tài):當(dāng)用戶登陸服務(wù)器事,設(shè)置用戶狀態(tài)為登陸狀態(tài),服務(wù)器根據(jù)該用戶列表狀態(tài)發(fā)送成員列表。在線狀態(tài):用戶在線,當(dāng)兩個(gè)用戶都在線時(shí),可以相互發(fā)送和接受成員列表。離線狀態(tài):當(dāng)用戶離線時(shí),不能發(fā)送和接受消息。在線用戶之間可以直接發(fā)送消息;對(duì)離線離線用戶需要服務(wù)器轉(zhuǎn)發(fā)。轉(zhuǎn)發(fā)關(guān)系如圖3.7所示。

36、在線用戶發(fā)送消息在線用戶給離線用戶發(fā)送消息圖3.7轉(zhuǎn)發(fā)關(guān)系圖B用戶類設(shè)計(jì) 在程序中聲明CUserInfo信息類。在該類中聲明USERSTATUE枚舉類型,描述用戶狀態(tài)。l ONLINE:在線狀態(tài)l OFFLINE:離線狀態(tài)l LOGIN:登陸狀態(tài)l UNKNOWN:未知狀態(tài),初始化狀態(tài)。成員函數(shù)如表3.1CUserInfo 成員函數(shù),類成員變量如表3-2所示。表3.1 成員函數(shù)函 數(shù) 名 稱返 回 值 功 能 CUserInfo() 無(wú) 構(gòu)造函數(shù)CUserInfo(constCUserInfo&userInfo) 無(wú) 復(fù)制構(gòu)造數(shù)CUserInfo () 無(wú) 析構(gòu)函數(shù) Init() Vo

37、id初始成員變量 Serialize(CArchive&ar) void 序列化Operator=(const CUserInfo&userInfo) CUserInfo& 賦值函數(shù)表3.2成員變量名 稱 類 型說(shuō) 明 m_strNameCString名稱m_strPasswordCstring密碼m_eStatusUSERSTATUE狀態(tài)m_lIP DWORDI P地址m_timeCTime時(shí)間C數(shù)據(jù)包類設(shè)計(jì)在程序中聲明CChatPacket類描述服務(wù)器和客戶端接收和發(fā)送的數(shù)據(jù)包。在該類中聲明PACKETTYPE枚舉類型。l MESSAGE:客戶端發(fā)送的消息l USE

38、RLIST:用戶列表l SERVERMSG:服務(wù)器發(fā)送的消息l UNKNOWN:未知類型表3-3:CChatPakcet類成員函數(shù)函 數(shù) 名 稱返 回 值功 能 CChatPacket() 無(wú) 構(gòu)造函數(shù)CChatPacket() 無(wú) 析夠函數(shù)Init()Viod 初始化成員變量Serialize(CArchive &ar)Void 序列化表3-4:CChatPacket類成員變量名 稱 類 型 說(shuō) 明m_type PACKETTYPE 包類型 m_UserInfo CUserInfo 用戶信息 m_strMsg CString 消息 m _pUserList CObList* 用戶鏈表

39、 m_OfflineUserInfo CUserInfo 離線用戶信息 m_time CTime 日期和時(shí)間4 即時(shí)通信系統(tǒng)實(shí)現(xiàn)4.1 服務(wù)器端設(shè)計(jì)實(shí)現(xiàn)4.1.1 服務(wù)器端靜態(tài)類圖圖4.1 服務(wù)器靜態(tài)類圖4.1.2 服務(wù)器主要類介紹CServerDlg類:創(chuàng)建服務(wù)器主窗口,管理用戶信息鏈表,管理在線用戶鏈表,管理離線用戶鏈表,讀取保存用戶信息,讀取保存離線消息等。表4.1類成員函數(shù) 函 數(shù) 名 稱 返 回 值 功 能CserverDlg 無(wú)構(gòu)造函數(shù) CServerDlg() 無(wú)析構(gòu)函數(shù)StartService() BOOL啟動(dòng)服務(wù)Init() BOOL初始化ProcessPendingRead

40、(CArchive *pArchiveIn, CArchive *pArchiveOut,CClientSocket) BOOL接收數(shù)據(jù)ProcessPendingAccept() Void接受客戶端連接請(qǐng)求ReleaseChatter(CClientSocket *pClientSocket) Void離線時(shí)刪除用戶DeleteChatter(CClientSocket *pClientSocket) Void用戶登陸密碼錯(cuò)誤時(shí)刪除用戶DeleteAllChatter() Void刪除所有在線用戶InitListCtrlSetting() Void定義鏈表控件InitUserList() V

41、oid初始化用戶鏈表SaveUserList(const CObList &obList) Void保存用戶信息LoadUserList(CObList &obList) Void讀取用戶消息SendUserList() Void發(fā)送用戶鏈表CopyUserList(CObList &obList) Void復(fù)制用戶鏈表DeleteTempUserList(CObList &obList) Void刪除臨時(shí)鏈表UpdateUserList(constCUserInfo&userInfo,CClientSocket *pClientSocket) BOOL

42、更新用戶鏈表TransmitMsg(constCChatPacket&packet,CClientSocket*pClientSocket) BOOL轉(zhuǎn)發(fā)離線消息UpdateServerListCtl(const CObList &obList) Void更新服務(wù)器界面OnInitDialog() BOOL初始化對(duì)話框OnRclickClientList(NMHDR* pNMHDR,LRESULT*pResult)Void選擇列表控件消息響應(yīng)函數(shù)OnServerListDeleteMenuitem() Void 刪除用戶消息響應(yīng)函數(shù) SaveUserList(const COb

43、List &obList)void保存用戶信息SaveOfflineMsg(const CObList &obList)void保存離線消息CListenSocket類 :派生于MFC的CSocket 類,用于接受客戶端的連接請(qǐng)求,在該類中重寫(xiě)了CAsyncSocket類OnAccept()虛函數(shù)。當(dāng)客戶端連接服務(wù)器時(shí),OnAccept()函數(shù)被調(diào)用。表4.2成員函數(shù)函 數(shù) 名 稱 返 回 值功 能CListenSocket(CServerDlg* pServerDlg) 無(wú) 構(gòu)造函數(shù) ClistenSocket() 無(wú) 析構(gòu)函數(shù)VoidOnAccept(intnErrorCo

44、de) void 接受連接請(qǐng)求CClientSocket 類:派生與MFC的CSocket類,用于接收客戶端和向其發(fā)送數(shù)據(jù)。在該類中重寫(xiě)CAsyncSocket類OnReceive()和OnClose()虛函數(shù)。表4.3成員函數(shù)函 數(shù) 名 稱 返 回 值 功 能CClientSocket(CServerDlg *pServDlg 無(wú)構(gòu)造函數(shù)CClientSocket() 無(wú)析構(gòu)函數(shù)Init() Void初始化SendUserList(CChatPacket *pPacket) Void發(fā)送用戶列表SendUserMsg(CChatPacket *pPacket) Void發(fā)送消息SaveUse

45、rInfo(SOCKADDR_IN clientAddr) Void保存用戶地址SaveUserInfo(constCUserInfo &userInfo) Void保存用戶狀態(tài)信息GetUserInfo() CUserInfo獲取用戶信息OnReceive(int nErrorCode) Void接收數(shù)據(jù)OnClose(int nErrorCode) Void關(guān)閉套接字l CServerAddressDlg: 用與設(shè)置服務(wù)器地址和斷口。l CServerApp:用于生成唯一實(shí)例。4.1.3 服務(wù)器端主要過(guò)程介紹啟動(dòng)服務(wù)器:?jiǎn)?dòng)服務(wù)器的過(guò)程就是創(chuàng)建套接字并開(kāi)始監(jiān)聽(tīng)客戶端連接的過(guò)程。主要

46、函數(shù): CSocket:Create()函數(shù);執(zhí)行過(guò)程: CSocket:Cretate -àCAsyncSocket-àCAsyncSocket-àCAsyncSocket:Socket()-àCAsyncSocket:Bind()-CAsyncSocket: AtachHandle()-àCAsyncSocket:Asyncselect()MFC 的底部函數(shù)在AttachHandle()中完成,流程圖4.2所示: 圖4-2 啟動(dòng)服務(wù)器流程服務(wù)器登陸如界面如圖4-3所示: 圖4.3 服務(wù)器登陸如界面初始化:列表試圖控件初始化用戶列表初始化讀取

47、離線消息;離線消息包括:發(fā)送消息的用戶,接收消息的用戶,接收和發(fā)送消息的時(shí)間接受客戶端請(qǐng)求:CListenSocket:OnAccept()-àCServerDlg:ProcessPendingAccept().接收數(shù)據(jù):在FD_READ網(wǎng)絡(luò)事件發(fā)生時(shí),CClienSocket:OnReceive()被調(diào)用.在該函數(shù)中與CSocket, CArchive, CSocketFile 協(xié)同工作完成文件的工作,同時(shí)調(diào)用CSocket 類的Receive()函數(shù):圖4.4接受過(guò)程流程圖處理數(shù)據(jù):l 保存離線消息l 保存用戶信息l 更新用戶列表更新用戶列表的過(guò)程如圖4.5: 圖4.5 更新用戶

48、列表的過(guò)程發(fā)送用戶鏈表轉(zhuǎn)發(fā)離線消息更新服務(wù)器界面用戶離線:更新服務(wù)器用戶列表中該用戶信息將該用戶從在線用戶列表中刪除通知在線用戶更新該用戶的狀態(tài)更新服務(wù)器界面刪除為該用戶分配的內(nèi)存空間退出:調(diào)用OnDestroy()函數(shù)保存用戶信息保存離線消息清理資源4.2 客戶端設(shè)計(jì)實(shí)現(xiàn)4.2.1 客戶端靜態(tài)類圖圖4.8 靜態(tài)類圖4.2.2 客戶端主要類介紹CClientDlg類:創(chuàng)建客戶端主窗口,創(chuàng)建聊天窗口,接收離線消息,發(fā)送離線消息和保存聊天記錄等。表4.1成員函數(shù) 函 數(shù) 名 稱返 回 值功 能 CClientDlg(CWnd *pParent=NULL) 無(wú)構(gòu)造函數(shù)CClientDlg() 無(wú)析夠

49、函數(shù)Init() BOOL初始化InitListCtrlSetting() BOOL初始列表控件ConnectToServer() BOOL連接服務(wù)器BegingListen() BOOL監(jiān)聽(tīng)ProcessPendingAccept() Void接受對(duì)方連接ProcessPendingRead() Void接受數(shù)據(jù)包SendPacket(CChatPacket &packet) Void發(fā)送數(shù)據(jù)ReadPacket() Void接收服務(wù)器數(shù)據(jù)UpdateClientListCtl() Void更新用戶列表ShowOfflineMsg(CChatPacket *pPacket) Void

50、顯示離線消息CreateUserList(CObList *pObList) Void創(chuàng)建用戶鏈表CreateChatDlg(CString *pChatDlg) Void創(chuàng)建聊天窗口SaveChatLog(CChatDlg *pChatDlg) Void保存聊天記錄OnDblclkClientList(NMHDR *pNMHDR,LRESULT *pResult) Void雙擊列表視圖控件的消息響應(yīng)函數(shù)l CChatDlg類:編輯和顯示消息。該類有三個(gè)構(gòu)造函數(shù)用于創(chuàng)建3種不同情況下的窗口:(1) 用與主動(dòng)與其他用戶聊天。對(duì)方可以是在線,也可以是離線狀態(tài)。(2) 顯示離線消息窗口。(3) 被動(dòng)

51、聊天窗口,其他用戶向該用戶發(fā)起的聊天請(qǐng)求所創(chuàng)建的窗口。表4.2成員函數(shù) 函數(shù)名稱返回值功能CChatDlg(CWnd *pParent=NULL)無(wú)被動(dòng)聊天窗口CChatDlg(CWnd *pParent,const CUser &pPacketConst CUserInfo &userInfo)無(wú)在線/離線窗口CChatDlg(CWnd *pParent,CChatPacket *pPacket)無(wú)顯示離線聊天窗口CChatDlg()無(wú)析構(gòu)函數(shù)PreTranslateMessage(MSG *pMsg)BOOL處理鍵盤(pán)消息InitSocket()BOOL創(chuàng)建套接字Connec

52、tToPeer()BOOL 連接對(duì)方ProcessPendingRead()Void接收數(shù)據(jù)DisplayRecvMessage(CChatPacket *pPacket)Void顯示消息DisplayOfflineMessage(CChatPacket *pPacket)Void顯示接收到的離線消息SendPeerMessage()Void發(fā)送消息InitArchive()Void初始化讀入對(duì)象etPeerInfo(CUserInfo &peerInfo)Void設(shè)置對(duì)方信息SetUserInfo(CUserInfo &userInfo)Void設(shè)置用戶信息*GetChatS

53、ocket()Void返回CChatSocket指針DisPlaySentMessage(CChatPacket *pPacket)Void顯示發(fā)送的離線消息OnDestroy()Void消息響應(yīng)函數(shù)DisPlaySentMessage()Void顯示發(fā)送的在線消息CListenSocket類:派生與CSocket類,用于監(jiān)聽(tīng)其他用戶的連接請(qǐng)求,該類重寫(xiě)了OnAccept()函數(shù)。CChatSOcket類:派生與CSocket類,用于監(jiān)聽(tīng)其他用戶的通信,該類重寫(xiě)了OnReceive()函數(shù);l CClientLoginDlg類:派生與CDialog類,用與創(chuàng)建服務(wù)器對(duì)話框。4.2.3客戶端主要過(guò)程介紹客戶端主要去實(shí)現(xiàn)的是功能:初始化,創(chuàng)建初始化窗口,接收窗口,接收離線聊天消息以及登陸控制。初始化:初始化列表圖控件開(kāi)始監(jiān)聽(tīng)連接服務(wù)器,連接服務(wù)器的過(guò)程如圖4.8所示 圖4.

溫馨提示

  • 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)論