基于Java即時聊天系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)_第1頁
基于Java即時聊天系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)_第2頁
基于Java即時聊天系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)_第3頁
基于Java即時聊天系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)_第4頁
基于Java即時聊天系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)_第5頁
已閱讀5頁,還剩72頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上 本科畢業(yè)設(shè)計(jì)(論文) 基于Java即時聊天系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn) 學(xué) 號:05學(xué)生姓名:何晶指導(dǎo)教師:范忠誠所在學(xué)院:計(jì)算機(jī)科學(xué)技術(shù)學(xué)院所學(xué)專業(yè):計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)2016年 6月專心-專注-專業(yè)摘 要伴隨著互聯(lián)網(wǎng)的高速發(fā)展,產(chǎn)生了一系列與互聯(lián)網(wǎng)相關(guān)的新鮮事物,即時聊天系統(tǒng)就是其中最具代表性的產(chǎn)物。即時聊天系統(tǒng)經(jīng)過不斷地發(fā)展,憑借其迅速、便捷、即時的特點(diǎn),逐漸成為一種重要的信息交流工具,受到越來越多的網(wǎng)民的青睞。即時聊天系統(tǒng)開發(fā)主要包括兩個方面:即時聊天系統(tǒng)服務(wù)器端設(shè)計(jì)、即時聊天系統(tǒng)客戶端設(shè)計(jì)。即時聊天系統(tǒng)服務(wù)器端設(shè)計(jì)主要通過Socket套接字建立服務(wù)器,服務(wù)器能夠讀取

2、和轉(zhuǎn)發(fā)從客戶端發(fā)來的信息,并且能夠刷新用戶列表。即時聊天系統(tǒng)客戶端設(shè)計(jì)主要通過與服務(wù)器建立連接,從而使服務(wù)器端與客戶端的信息進(jìn)行交流。在這里,網(wǎng)絡(luò)通信機(jī)制原理得到了運(yùn)用,通過直接繼承Thread類來建立多線程。同時,開發(fā)中利用了計(jì)算機(jī)網(wǎng)絡(luò)編程的基本理論知識,如TCP/IP協(xié)議、客戶端/服務(wù)器端模式(Client/Server模式)、網(wǎng)絡(luò)編程的設(shè)計(jì)方法等。在網(wǎng)絡(luò)編程中利用流來實(shí)現(xiàn)信息的交換,從而讀取和發(fā)送信息。即時聊天系統(tǒng)采用myeclipse為基本開發(fā)環(huán)境和java語言進(jìn)行編寫,通過不斷修正和改進(jìn)初始原型系統(tǒng),直至此系統(tǒng)完全可行為止。關(guān)鍵詞:即時聊天系統(tǒng);套接字;Java AbstractAl

3、ong with the high-speed development of Internet, produced a series of new things related to the Internet, instant messaging system is the product of one of the most representative. Instant messaging system through constant development, with its fast, convenient, real-time characteristics, becoming a

4、n important communication tool, get the favour of a growing number of Internet users. Instant messaging system development mainly includes two aspects: instant messaging system server client, instant messaging system design. Instant messaging system design mainly through the Socket server Socket ser

5、ver, the server can read and forward from the client's information, and be able to refresh the user list. Instant messaging system design mainly by the client and the server connection is established, which makes the server to communicate with the client's information. Here, the principle ha

6、s been using network communication mechanism, through direct inheritance for building a multithreaded Thread class. At the same time, the use of computer network programming in the development of the basic theory of knowledge, such as TCP/IP protocol, Client/Server mode (Client/Server mode), network

7、 programming design method, etc. Using flow in network programming to achieve the exchange of information, so as to read and send information. Instant messaging system using myeclipse as the basic development environment and the Java language to write, by constantly revised and improved the initial

8、prototype system, until the system is completely feasible. Key words:Instant messaging system ;socket ; Java目 錄 第1章 緒論1.1 課題背景人類社會在不斷的發(fā)展,從原始社會發(fā)展到如今高度發(fā)達(dá)的文明社會,離不開人類的團(tuán)結(jié)協(xié)作及創(chuàng)造力,而交流便是人類在發(fā)展過程中至關(guān)重要的一項(xiàng)技能。在人類漫長的發(fā)展過程中,交流的方式也在不斷更新變化。從最早的交流方式直接交流(語言、文字等),到后來利用介質(zhì)的交流方式間接交流(飛鴿傳書、烽火狼煙等),再到近現(xiàn)代利用工業(yè)革命的成果,創(chuàng)造出了遠(yuǎn)程交流方式(電報(bào)、

9、電話等)。而到了上世紀(jì)末,隨著計(jì)算機(jī)技術(shù)和網(wǎng)絡(luò)技術(shù)的高速發(fā)展,誕生了一種新型交流方式即時聊天系統(tǒng)。即時聊天系統(tǒng)在溝通、協(xié)作方面有著其它交流方式無法比擬的優(yōu)勢,它憑借方便、快捷、實(shí)時等特點(diǎn)得到了越來越多人的青睞。本課題研究的就是基于Java語言的即時聊天系統(tǒng)。即時聊天系統(tǒng)是為了滿足各用戶之間進(jìn)行即時的信息交流而設(shè)計(jì)的一套系統(tǒng),作為一種新型的通信和交流工具,即時聊天系統(tǒng)具有極其廣泛的發(fā)展前景。本系統(tǒng)的主要特性是能動態(tài)、實(shí)時的完成信息的傳遞,同時具有高效的交互性,更有效的處理客戶請求,同時維護(hù)和更新也更加簡易。本文接下來會依次介紹即時聊天系統(tǒng)運(yùn)行所需的環(huán)境及其工作流程和各個功能控件的工作原理,并且文

10、中提供了部分程序源代碼。1.2 國內(nèi)外發(fā)展現(xiàn)狀1.2.1 國外發(fā)展現(xiàn)狀當(dāng)今國際上對網(wǎng)絡(luò)通信系統(tǒng)研究的較好的公司有:思科,Sun,Ms等公司,思科主要研究的是底層的傳輸;MS,Sun公司研究的是應(yīng)用層。其中MS公司憑借其在操作系統(tǒng)的壟斷地位,為了在網(wǎng)絡(luò)的發(fā)展中取得先機(jī),采用了各種各樣的手段。但是,其捆綁的msn,無論從功能上,還是技術(shù)上來說,都不算是非常先進(jìn)的。這讓人想起了當(dāng)年的網(wǎng)景公司,網(wǎng)景只是生不逢時。MS不擇手段的想打跨網(wǎng)景,可見其對網(wǎng)絡(luò)的重視。如今,Sun公司在網(wǎng)絡(luò)應(yīng)用上捷足先登,憑借著Java,Sun在網(wǎng)絡(luò)的應(yīng)用上領(lǐng)先于MS。微軟,想用同樣的辦法搞跨對手,因此它拿出了Visual c#

11、來對抗Java。這些都是在應(yīng)用層面的開發(fā)工具,應(yīng)用層上的產(chǎn)品就更顯種類繁多。ICQ幾乎是國際上通用的即時通信工具,由于在我國它的應(yīng)用不是很廣,所以其原理也很少被介紹。Msn,是MS的產(chǎn)品,同樣在國內(nèi)沒什么市場,所以對其原理也很少被討論過1。1.2.2 國內(nèi)發(fā)展現(xiàn)狀國內(nèi)在應(yīng)用層上的網(wǎng)絡(luò)應(yīng)用軟件目前發(fā)展異常的火爆,因?yàn)槲覈兄W(wǎng)絡(luò)應(yīng)用的最大的市場?,F(xiàn)在國內(nèi)網(wǎng)絡(luò)的基礎(chǔ)性建設(shè)發(fā)展迅速,應(yīng)用軟件也層出不窮。不少廠商分別推出了自己的IM,如騰訊QQ、阿里旺旺、新浪UC、移動飛信等,這些都是我們所熟悉的PC端的即時通訊軟件。隨著智能手機(jī)、平板電腦的普及,一些移動端的即時通信系統(tǒng)也如雨后春筍般涌現(xiàn)出來,如小米

12、公司的米聊,騰訊公司的微信,還有年輕人之間很流行的陌陌、游戲玩家常用的YY語音等。這些軟件本身功能也越來越豐富,遠(yuǎn)遠(yuǎn)超出了單純的即時聊天系統(tǒng)的范疇?,F(xiàn)在的即時通信系統(tǒng)不僅僅是人們的溝通工具,還成為了人們利用其進(jìn)行電子商務(wù)、工作、學(xué)習(xí)等交流的平臺。1.3 開發(fā)目的和意義在當(dāng)今社會,不管是個人用戶還是企業(yè)用戶,對溝通的需求總是在不斷地發(fā)展。傳統(tǒng)的溝通交流方式如電話、傳真、郵件等已經(jīng)不能完全滿足人們學(xué)習(xí)、工作、生活的需要。隨著計(jì)算機(jī)軟件、計(jì)算機(jī)網(wǎng)絡(luò)和移動通信技術(shù)的發(fā)展融合,集方便、廉價(jià)、快捷、實(shí)時等優(yōu)點(diǎn)于一身的即時聊天系統(tǒng)可以說是繼電子郵件、萬維網(wǎng)之后,互聯(lián)網(wǎng)上最具有殺傷力的應(yīng)用。很難想象一臺個人電

13、腦沒有安裝像QQ這樣的即時通訊軟件。雖然即時聊天系統(tǒng)設(shè)計(jì)的初衷是聊天,但正如前面所說,其功能已經(jīng)超出了聊天的范疇,隨著企業(yè)即時通訊工具(EIM)的出現(xiàn),IM系統(tǒng)更是成了企業(yè)信息發(fā)布、資源共享、問題探討和網(wǎng)絡(luò)營銷的一把利器。通過現(xiàn)有的技術(shù),企業(yè)完全可以摒棄通用的免費(fèi)的即時通訊系統(tǒng),轉(zhuǎn)而根據(jù)自己企業(yè)的需求定制開發(fā)自己專屬的內(nèi)部即時通訊系統(tǒng),以實(shí)現(xiàn)更好的管理,提高員工的工作效率。我們的生活中溝通無處不在,即時聊天系統(tǒng)這類廣泛使用的基礎(chǔ)軟件的研究開發(fā)意義深遠(yuǎn)。對于個人用戶而言,能夠?qū)崿F(xiàn)好友即時通訊,傳遞實(shí)時信息,讓用戶隨時隨地都可與好友保持暢快有效的溝通。 對于企業(yè)用戶而言,能夠?qū)崿F(xiàn)建立員工

14、交流平臺,統(tǒng)一信息發(fā)布平臺,減少運(yùn)營成本,促進(jìn)企業(yè)辦公效率。 商業(yè)即時通訊系統(tǒng)的功能越來越多樣化,一些功能也很新穎,如現(xiàn)在流行的語音對講功能。本系統(tǒng)不比商業(yè)系統(tǒng),沒有考慮過多的復(fù)雜性,主要實(shí)現(xiàn)了基本的通訊功能,以滿足學(xué)習(xí)研究之用。1.4 系統(tǒng)設(shè)計(jì)的思想基于Java技術(shù)的聊天系統(tǒng)主要是探索如何在Java技術(shù)下能夠?qū)崿F(xiàn)即時聊天的一些基本功能:用戶注冊,用戶登錄,查找其他用戶,添加刪除好友,添加個性簽名,發(fā)布和接收系統(tǒng)消息,實(shí)現(xiàn)一對一聊天,能夠發(fā)送表情等功能。論文的設(shè)計(jì)主要采用了兩種研究方法:一是文獻(xiàn)資料研究的方法。在研究聊天系統(tǒng)現(xiàn)實(shí)中,本人通過圖書館、電子圖書館學(xué)習(xí)了Java語言中的一些

15、編程技術(shù);二是理論與實(shí)際相結(jié)合,既然掌握了技術(shù)與方法,那么就應(yīng)該快速的進(jìn)行實(shí)踐,在軟件的設(shè)計(jì)過程中,才能夠理解到理論與現(xiàn)實(shí)的差距,遇到棘手問題,應(yīng)該快速查閱資料快速攻破。第2章 方案論證2.1 方案分析經(jīng)過認(rèn)真的研究與分析,同時綜合各種計(jì)算機(jī)高級語言的特征和適應(yīng)范圍,最終決定選擇純面向?qū)ο蟮腏ava語言來完成即時聊天系統(tǒng)的設(shè)計(jì)。對于本系統(tǒng)的設(shè)計(jì),可以采用C/S和B/S兩種不同的模式。在數(shù)據(jù)庫方面,Hibernate和MyBatics都有著很強(qiáng)大的功能,而且Mysql和Oracle也有著不同的優(yōu)缺點(diǎn)。綜上所述,可以得到以下兩個方案。方案一:C/S模式+Hibernate+OracleC/S(Cl

16、ient/Server)結(jié)構(gòu),即大家熟知的客戶機(jī)和服務(wù)器結(jié)構(gòu),其優(yōu)點(diǎn)是能充分發(fā)揮客戶端PC的處理能力,很多工作可以在客戶端處理后再提交給服務(wù)器。對應(yīng)的優(yōu)點(diǎn)就是客戶端響應(yīng)速度快。而且Hibernate對數(shù)據(jù)庫進(jìn)行的是重量級的封裝,對整個運(yùn)行速度不會很慢。而且Oracle體積很大一般在幾個GB的安裝包,運(yùn)行時它的內(nèi)存一般是幾百兆,但是Oracle集成的功能非常強(qiáng)大。方案二:B/S模式+MyBatics+MysqlB/S(Browser/Server)結(jié)構(gòu)即瀏覽器和服務(wù)器結(jié)構(gòu),它是隨著Internet技術(shù)的興起,對C/S結(jié)構(gòu)的一種變化或者改進(jìn)的結(jié)構(gòu)。在這種結(jié)構(gòu)下,用戶工作界面是通過WWW瀏覽器來實(shí)現(xiàn)

17、,極少部分事務(wù)邏輯在前端(Browser)實(shí)現(xiàn),但是主要事務(wù)邏輯在服務(wù)器端(Server)實(shí)現(xiàn),形成所謂三層3-tier結(jié)構(gòu)。這樣就大大簡化了客戶端電腦載荷,減輕了系統(tǒng)維護(hù)與升級的成本和工作量,降低了用戶的總體成本(TCO)。MyBatics是對數(shù)據(jù)庫的輕量的一個封裝,但是sql語句需要自己來設(shè)置,配置在xml文件中。而MYSQL非常小,一般幾十兆,對主機(jī)的內(nèi)存占用也不是很大,安裝方便。2.2 可行性分析開發(fā)任何一個系統(tǒng),都是要受到時間和資源等的一些限制。因此,在每一個系統(tǒng)開發(fā)之前,都必須要進(jìn)行可行性分析,這樣就可以減少軟件開發(fā)所帶來的風(fēng)險(xiǎn),也大大的避免了在物力、人力和財(cái)力上的浪費(fèi)2。本系統(tǒng)的

18、可行性分析應(yīng)包括四個方面:經(jīng)濟(jì)可行性、技術(shù)可行性、操作可行性和法律可行性。2.2.1 經(jīng)濟(jì)可行性計(jì)算機(jī)網(wǎng)絡(luò)已經(jīng)普及,因此在網(wǎng)絡(luò)設(shè)備上不需要進(jìn)行大的投入。本系統(tǒng)如果采用一個MySQL數(shù)據(jù)庫服務(wù)器,相對于Oracle數(shù)據(jù)庫服務(wù)器成本偏低。同時,本系統(tǒng)能夠讓人們的交流更加便捷,其帶來的間接效益遠(yuǎn)遠(yuǎn)超過了其開發(fā)成本,所以在經(jīng)濟(jì)上本系統(tǒng)的設(shè)計(jì)是具有完全的可行性的。2.2.2 技術(shù)可行性此系統(tǒng)可以使用MySQL存儲用戶信息,由于MyBatics對Sql語句的封裝小,這會增加開發(fā)過程中的代碼量,并且,Oracle運(yùn)行時很占用內(nèi)存,它集成了很多功能,而且我們用很多功能用不上,所以MySQLl是很滿足我們的需求

19、的。MySQL作為一種關(guān)聯(lián)數(shù)據(jù)庫管理系統(tǒng),將數(shù)據(jù)保存在不同的表中,是一個安全度高、可靠性好的并且能夠支持面向?qū)ο笤O(shè)計(jì)的數(shù)據(jù)庫系統(tǒng)。同時,MySQL開放源碼,速度快、總體擁有成本低等特點(diǎn)Error! Reference source not found.。并且在易用性、可維護(hù)性、靈活性等方面也很好。采用JDBC技術(shù)對其進(jìn)行增刪改查,使用套接字來實(shí)現(xiàn)網(wǎng)絡(luò)上客戶和服務(wù)器之間的連接,同時采用Hibernate 框架來管理Java 類到數(shù)據(jù)庫表的映射(包括從Java數(shù)據(jù)類型到SQL數(shù)據(jù)類型的映射),并且提供數(shù)據(jù)查詢和獲取數(shù)據(jù)的方法。所以從技術(shù)角度來看本系統(tǒng)的設(shè)計(jì)是具有完全的可行性的。2.2.3 操作可行

20、性一方面可以讓本地機(jī)同時作為客戶端和服務(wù)器實(shí)現(xiàn)一臺機(jī)器上的即時通訊。另一方面,只要一臺以上計(jì)算機(jī)連接在同一個局域網(wǎng)內(nèi),并且在作為客戶端機(jī)器的本系統(tǒng)中設(shè)置需要連接的作為服務(wù)器端機(jī)器的IP地址,本系統(tǒng)就可以實(shí)現(xiàn)局域網(wǎng)通訊,所以操作上完全不存在問題。如果要實(shí)現(xiàn)internet上通訊,理論上只需要將服務(wù)器端運(yùn)行在一個有固定IP的公網(wǎng)上就可以。2.2.4 法律可行性本即時聊天系統(tǒng)的開發(fā),不會侵犯到別人的專利版權(quán),也不違反國家的相關(guān)規(guī)定,所以在法律上來說也是可行的。2.3 方案的確定根據(jù)以上的分析和總結(jié),很顯然方案一更適合我們的完成系統(tǒng)設(shè)計(jì)。因此,我們使用方案一來進(jìn)行項(xiàng)目的開發(fā)。2.4 系統(tǒng)設(shè)計(jì)的相關(guān)技術(shù)

21、本即時聊天系統(tǒng)是基于Java語言的,采用C/S結(jié)構(gòu),使用MySQL存儲用戶信息,采用JDBC技術(shù)對其進(jìn)行增刪改查,使用套接字來實(shí)現(xiàn)網(wǎng)絡(luò)上客戶和服務(wù)器之間的連接,同時采用Hibernate 框架來管理Java 類到數(shù)據(jù)庫表的映射,并且提供數(shù)據(jù)查詢和獲取數(shù)據(jù)的方法。1、Java語言Java是一種通過解釋方式來執(zhí)行的語言,其語法規(guī)則和C+類似。同時,Java也是一種跨平臺的程序設(shè)計(jì)語言3。用Java語言編寫的程序,可以運(yùn)行在任何平臺和設(shè)備上,如跨越IBM個人電腦、MAC蘋果計(jì)算機(jī)、各種微處理器硬件平臺,以及Windows、Unix、OS/2、MAC OS等系統(tǒng)平臺,真正實(shí)現(xiàn)“一處編寫,到處運(yùn)行”。J

22、ava非常適合于企業(yè)網(wǎng)絡(luò)和Internet環(huán)境,并且已成為Internet中最具影響力、最受歡迎的編程語言之一。與目前常用的C+語言相比,Java語言簡潔得多,而且提高了可靠性,除去了最大的程序根源錯誤,此外它還有較高的安全性,可以說它是有史以來最為卓越的編程語言。Java語言編寫的程序既是編譯型的,又是解釋型的。程序代碼經(jīng)過編譯之后轉(zhuǎn)換為一種稱為Java字節(jié)碼的中間語言,Java虛擬機(jī)(JVM)將對字節(jié)碼進(jìn)行解釋和運(yùn)行。編譯只進(jìn)行一次,而解釋在每次運(yùn)行程序時都會進(jìn)行。編譯后的字節(jié)碼采用一種針對JVM優(yōu)化過的機(jī)器碼的形式保存,虛擬機(jī)將字節(jié)碼解釋為機(jī)器碼,然后在計(jì)算機(jī)上運(yùn)行。Java語言的特點(diǎn)包

23、括:簡單、面向?qū)ο?、分布性、可移植性、解釋型?安全性、健壯性、多線程、高性能、動態(tài)。2、MyEclipse簡介MyEclipse,是基于Eclipse開發(fā)的功能強(qiáng)大的企業(yè)級集成開發(fā)環(huán)境,主要用于Java、Java EE以及移動應(yīng)用的開發(fā)。據(jù)官方介紹,諸如三星、IBM、戴爾、惠普、花旗集團(tuán)、西門子、斯坦福大學(xué)、波音公司等知名機(jī)構(gòu)均使用MyEclipse進(jìn)行Java、JavaEE開發(fā),80%以上的全球財(cái)富100強(qiáng)企業(yè)均是MyEclipse的用戶。MyEclipse提供了對UML、Ajax、Web、Web Services、J2EE、JSP、 XML、 Struts、 JSF、 Java Pers

24、istence、 EJB、擴(kuò)展數(shù)據(jù)庫以及各種應(yīng)用服務(wù)器的集成支持4。MyEclipse也全面支持各種主流的第三方框架,讓你能夠快速高效地進(jìn)行開發(fā)工作。此外,MyEclipse還全面支持各種基于Eclipse平臺的插件,允許你自由定制或擴(kuò)展個性化功能。MyEclipse全面支持Eclipse開源平臺的所有功能特性,如果你熟悉Eclipse,那么你能夠輕松地上手MyEclipse,包括熟悉的Eclipse快捷鍵,而且使用MyEclipse完成某項(xiàng)任務(wù)往往要比使用Eclipse更加快速、簡單5。3、Oracle簡介 Oracle Database,又名Oracle RDBMS,或簡稱Ora

25、cle。是的一款。它是在數(shù)據(jù)庫領(lǐng)域一直處于領(lǐng)先地位的產(chǎn)品??梢哉fOracle數(shù)據(jù)庫系統(tǒng)是目前世界上流行的關(guān)系數(shù)據(jù)庫管理系統(tǒng),系統(tǒng)可移植性好、使用方便、功能強(qiáng),適用于各類大、中、小、微機(jī)環(huán)境。它是一種高效率、可靠性好的 適應(yīng)高吞吐量的數(shù)據(jù)庫解決方案。 ORACLE是美國ORACLE公司()提供的以為核心的一組軟件產(chǎn)品,是目前最流行的客戶/服務(wù)器(CLIENT/SERVER)或B/S的數(shù)據(jù)庫之一。比如SilverStream就是基于數(shù)據(jù)庫的一種中間件。ORACLE數(shù)據(jù)庫是目前世界上使用最為廣泛的,作為一個通用的數(shù)據(jù)庫系統(tǒng),它具有完整的功能;作為一個關(guān)系數(shù)據(jù)庫,它是一個完備關(guān)系的產(chǎn)品;作為

26、分布式數(shù)據(jù)庫它實(shí)現(xiàn)了功能。但它的所有知識,只要在一種機(jī)型上學(xué)習(xí)了ORACLE知識,便能在各種類型的機(jī)器上使用它7。4、網(wǎng)絡(luò)通信協(xié)議簡介 網(wǎng)絡(luò)通信協(xié)議為連接不同操作系統(tǒng)和不同硬件體系結(jié)構(gòu)的互聯(lián)網(wǎng)絡(luò)提供通信支持,是一種網(wǎng)絡(luò)通用語言。網(wǎng)絡(luò)通信的層次結(jié)構(gòu)和網(wǎng)絡(luò)通信的協(xié)議,是開發(fā)網(wǎng)絡(luò)程序的基礎(chǔ)。目前在網(wǎng)絡(luò)編程方面最常用的是TCP/IP和UDP通信協(xié)議。通過這些協(xié)議,網(wǎng)絡(luò)通信各主機(jī)可以用一種統(tǒng)一而非雜亂的規(guī)范,高效便捷地相互發(fā)送和接收消息。本系統(tǒng)在通訊功能實(shí)現(xiàn)中采用了TCP傳輸協(xié)議,直接使用的Java API提供的類Socket和Serversocket等來實(shí)現(xiàn)。 (1)TC

27、P傳輸協(xié)議說明 TCP協(xié)議是面向連接的協(xié)議,比如說在客戶端A和B進(jìn)行連接之前必須首先建立數(shù)據(jù)通路,就向打電話一樣,在通話之前必須先撥號,等待對方的接聽以后才能進(jìn)行通話。TCP協(xié)議中數(shù)據(jù)傳輸采取的是同步方式,當(dāng)數(shù)據(jù)發(fā)送到對方時,必須等待接收方的應(yīng)答信號后才能繼續(xù)下一次的發(fā)送工作,即通常所講的三次握手。由于TCP協(xié)議采用的是這種連接方式,因此由它建立的連接是可靠的。在網(wǎng)絡(luò)不是十分理想的情況下,速度犧牲很大,但是卻能夠保證所傳輸?shù)臄?shù)據(jù)的正確性。(2)UDP傳輸協(xié)議說明 UDP協(xié)議采用的是面向無連接的通信方式,它在通信前不需要提前建立通信鏈路,它是異步的,數(shù)據(jù)的發(fā)送比較迅速,不需要

28、等待應(yīng)答信號。優(yōu)點(diǎn)是發(fā)送速度較快,但是在數(shù)據(jù)的一致性方面不好,在網(wǎng)絡(luò)差的情況下,容易丟失數(shù)據(jù)包。另外,使用UDP傳輸數(shù)據(jù)時對數(shù)據(jù)是有大小限制的,每個被傳輸?shù)陌仨毾薅ㄔ?4KB之內(nèi)6。 (3)Java Socket(套接字)說明 在Java語言里,使用Socket(套接字)模型來封裝網(wǎng)絡(luò)傳輸?shù)木唧w動作。Java提供了Socket的相關(guān)包,Java中Socket的設(shè)計(jì)采用了面向?qū)ο蟮乃悸?,模擬了TCP協(xié)議里客戶端和服務(wù)器端的通信流程,并封裝了創(chuàng)建連接、發(fā)送接收數(shù)據(jù)流、斷開連接等方法。所以,使用Socket包,程序員不僅可以創(chuàng)建客戶端和服務(wù)器之間的通信信道,還能實(shí)現(xiàn)發(fā)

29、送和接收數(shù)據(jù)流等的網(wǎng)絡(luò)通信功能8。 針對一個特定的連接和通信過程,服務(wù)器和客戶端程序里都有一個Socket對象,我們可以想象一下其場景,在通信過程中,有一條虛擬的“光纜”構(gòu)架在服務(wù)器和客戶端之間,光纜的兩頭都插在了Socket這“插座”里。事實(shí)上,Java采用Socket包是對TCP協(xié)議的進(jìn)一步抽象,更向程序員屏蔽了TCP通信的細(xì)節(jié),具體表現(xiàn)在以下兩方面 。1、 在使用Socket類里的方法建立信道的時候,Socket類屏蔽了通過三次握手建立信道的全部流程,直接向程序員返回信道類的句柄(Socket類的實(shí)例)或是出錯信息。 2、 Socket類向程序員屏蔽了服務(wù)器

30、和客戶端之間的物理硬件指標(biāo)和底層的連接方式,所以我們在使用Socket類開發(fā)網(wǎng)絡(luò)程序時,可以簡單地調(diào)用其提供的方法來傳輸數(shù)據(jù),而不必關(guān)心數(shù)據(jù)流的傳輸和接收方式。5、C/S模式20世紀(jì)90年代出現(xiàn)并迅速占據(jù)主導(dǎo)地位的一種計(jì)算模式為客戶機(jī)/服務(wù)器模式,簡稱為C/S模式,它實(shí)際上就是把主機(jī)終端模式中原來全部集中在主機(jī)部分的任務(wù)一分為二,保留在主機(jī)上的部分負(fù)責(zé)集中處理和匯總運(yùn)算,成為服務(wù)器;而下放到終端的部分負(fù)責(zé)為用戶提供友好的交互界面,稱為客戶機(jī)。相對于以前的模式,C/S模式最大的改進(jìn)是不再把所有軟件都裝進(jìn)一臺計(jì)算機(jī),而是把應(yīng)用系統(tǒng)分成兩個不同的角色和兩個不同的地位:一般在運(yùn)算能力較強(qiáng)的計(jì)算機(jī)上安裝

31、服務(wù)器端程序,而在一般的PC上安裝客戶機(jī)程序。正是由于個人PC機(jī)的出現(xiàn)使客戶機(jī)/服務(wù)器模式成為可能,因?yàn)镻C機(jī)具有一定的運(yùn)算能力,用它代替了上面第一種模式的啞終端后,就可以把主機(jī)端的一部分工作放在客戶機(jī)端完成,從而減輕了主機(jī)的負(fù)擔(dān),也增加了系統(tǒng)對用戶的響應(yīng)速度和響應(yīng)能力9。客戶機(jī)和服務(wù)器之間通過相應(yīng)的網(wǎng)絡(luò)協(xié)議來進(jìn)行通訊??蛻魴C(jī)向服務(wù)器發(fā)出數(shù)據(jù)請求,服務(wù)器將數(shù)據(jù)傳送給客戶機(jī)進(jìn)行計(jì)算,計(jì)算完畢,計(jì)算結(jié)果可返回給服務(wù)器。這種模式的優(yōu)點(diǎn)充分利用了客戶機(jī)的性能,使計(jì)算能力大大提高;另外,由于客戶機(jī)和服務(wù)器之間的通訊是通過網(wǎng)絡(luò)協(xié)議進(jìn)行的,是一種邏輯的聯(lián)系,因此物理上在客戶機(jī)和服務(wù)器兩端是易于擴(kuò)充的。C/S

32、模式是目前占主流的網(wǎng)絡(luò)計(jì)算模式。第3章 需求分析3.1 系統(tǒng)基本功能描述客戶端可以實(shí)現(xiàn)注冊,登錄,即時聊天,相互之間收發(fā)文件,發(fā)送截圖,查看歷史聊天記錄等功能。收發(fā)消息時,可以實(shí)現(xiàn)離線接收。服務(wù)器端應(yīng)當(dāng)建立一個ServerSocket,并且不斷進(jìn)行偵聽是否有客戶端連接或者斷開連接(包括判斷沒有響應(yīng)的連接超時)。服務(wù)器端應(yīng)當(dāng)是一個信息發(fā)送中心,所有客戶端的信息都傳到服務(wù)器端,由服務(wù)器端根據(jù)要求分發(fā)信息。在后臺管理系統(tǒng),可以到對用戶進(jìn)行增刪改查,查看在線用戶,和踢用戶下線。3.2 系統(tǒng)需求分析聊天系統(tǒng)不外乎兩個方面,服務(wù)器端和客戶端。簡單分析一下兩個方面所要完成的任務(wù),對設(shè)計(jì)這個程序來說,等于完成

33、了一半。首先來看一下服務(wù)器端的任務(wù): (1)服務(wù)器端應(yīng)當(dāng)建立一個ServerSocket,并且不斷進(jìn)行偵聽是否有客戶端連接或者斷開連接(包括判斷沒有響應(yīng)的連接超時)。 (2)服務(wù)器端應(yīng)當(dāng)是一個信息發(fā)送中心,所有客戶端的信息都傳到服務(wù)器端,由服務(wù)器端根據(jù)要求分發(fā)信息。以上就是服務(wù)器端最主要的兩個任務(wù)。不難看出,服務(wù)器端的任務(wù)并不復(fù)雜??蛻舳藨?yīng)該完成的工作包括: (1)與服務(wù)器端建立通信通道,向服務(wù)器端發(fā)送信息。 (2)接收來自服務(wù)器的信息。相對服務(wù)器而言,客戶端的任務(wù)更加簡單,有了以上的簡單分析,可以知道,解決上述四個問題,即完成了該聊天系統(tǒng)的核心。3.3 數(shù)據(jù)流圖數(shù)據(jù)流圖(DFD),是從數(shù)據(jù)傳

34、遞和加工角度,以圖形方式來表達(dá)系統(tǒng)的邏輯功能、數(shù)據(jù)在系統(tǒng)內(nèi)部的邏輯流向和邏輯變換過程。是結(jié)構(gòu)化系統(tǒng)分析方法的主要表達(dá)工具及用于表示軟件模型的一種圖示方法 10。1. 頂層數(shù)據(jù)流圖圖3-1 系統(tǒng)頂層數(shù)據(jù)流圖2. 客戶端數(shù)據(jù)流圖圖3-2 客戶端數(shù)據(jù)流圖3. 服務(wù)器端數(shù)據(jù)流圖圖3-3 服務(wù)器端數(shù)據(jù)流圖3.4 數(shù)據(jù)字典數(shù)據(jù)字典的作用主要是對數(shù)據(jù)流程圖中的數(shù)據(jù)項(xiàng),數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)流,處理邏輯,數(shù)據(jù)存儲和外部實(shí)體等方面進(jìn)行具體的定義Error! Reference source not found.。建立數(shù)據(jù)字典的目的是為了保證全局?jǐn)?shù)據(jù)的一致性和準(zhǔn)確性。數(shù)據(jù)字典配以數(shù)據(jù)流程圖就可以從圖形和文字兩方

35、面對系統(tǒng)做出完整的定義和描述Error! Reference source not found.。1.離線消息表(1)數(shù)據(jù)項(xiàng):MSG_ID含義說明:消息ID別名:消息ID類型:NUMBER(2)數(shù)據(jù)項(xiàng):MSG_CONTENT含義說明:消息內(nèi)容別名:消息內(nèi)容類型:VARCHAR2長度:2000(3)數(shù)據(jù)項(xiàng):MSG_SENDFROM含義說明:消息發(fā)送者別名:消息發(fā)送者類型:INTEGER(4)數(shù)據(jù)項(xiàng):MSG_SENDTO含義說明:消息接收者別名:消息接收者類型:INTEGER(5)數(shù)據(jù)項(xiàng):MSG_SENDTIME含義說明:消息發(fā)送時間別名:消息發(fā)送時間類型:DATE(6)數(shù)據(jù)項(xiàng):MSG_REMAR

36、K含義說明:備注別名:備注類型:VARCHAR2長度:3000(7)數(shù)據(jù)項(xiàng):MSG_TYPE含義說明:消息類型,如是群聊消息還是私聊消息別名:消息類型類型:VARCHAR2長度:22.用戶信息表(1)數(shù)據(jù)項(xiàng):U_ID含義說明:用戶ID別名:用戶ID類型:NUMBER(2)數(shù)據(jù)項(xiàng):U_NAME含義說明:用戶名別名:用戶名類型:VARCHAR2長度:50(3)數(shù)據(jù)項(xiàng):U_PWD含義說明:用戶密碼別名:用戶密碼類型:VARCHAR2長度:50(4)數(shù)據(jù)項(xiàng):U_IP含義說明:IP地址別名:IP地址類型:VARCHAR2長度:50(5)數(shù)據(jù)項(xiàng):U_STATE含義說明:用戶狀態(tài)別名:用戶狀態(tài)類型:VARC

37、HAR2長度:50(6)數(shù)據(jù)項(xiàng):U_GENDER含義說明:性別別名:性別類型:VARCHAR2長度:50(7)數(shù)據(jù)項(xiàng):U_EMAIL含義說明:電子郵件別名:電子郵件類型:VARCHAR2長度:50 (8)數(shù)據(jù)項(xiàng):U_LAST_LOGIN含義說明:最后一次登錄別名:最后一次登錄類型:DATE(9)數(shù)據(jù)項(xiàng):U_LAST_EXIT含義說明:最后一次退出別名:最后一次退出類型:DATE(10)數(shù)據(jù)項(xiàng):U_REMARKE含義說明:備用別名:備用類型:VARCHAR2長度:3000(11)數(shù)據(jù)項(xiàng):U_SIGNATURE含義說明:個性簽名別名:個性簽名類型:VARCHAR2長度:100(12)數(shù)據(jù)項(xiàng):U_H

38、EAD_IMG含義說明:用戶頭像別名:用戶頭像類型:VARCHAR2長度:100(13)數(shù)據(jù)項(xiàng):U_TYPE含義說明:類型別名:類型類型:VARCHAR2長度:50(14)數(shù)據(jù)項(xiàng):U_BIRTHDAY含義說明:用戶生日別名:用戶生日類型:DATE3.5 用例圖1.普通用戶的用例圖: 圖3-4 普通用戶用例圖2.后臺管理員的用例圖:圖 3-5 后臺用戶用例圖第4章 系統(tǒng)概要設(shè)計(jì)4.1 系統(tǒng)總體流程圖圖4-1 系統(tǒng)總體流程圖4.2 系統(tǒng)功能模塊劃分本系統(tǒng)主要分為注冊、登錄、聊天、后臺管理四大模塊。整個系統(tǒng)的詳細(xì)結(jié)構(gòu)如圖4-2所示。圖4-2 系統(tǒng)總體功能模塊劃分各個功能模塊設(shè)計(jì)如下:1、注冊模塊&#

39、160;在登錄界面上有注冊按鈕,用戶可以點(diǎn)擊注冊,填入個人相關(guān)資料,提交給服務(wù)器。服務(wù)器接收到信息后通過純JDBC方式或者JDBCODBC橋接的方式連接數(shù)據(jù)庫并添加記錄。 用戶注冊流程圖如圖4-3: 圖 4-3 用戶注冊流程圖2、登錄模塊 用戶在客戶端輸入賬號和密碼,然后建立與服務(wù)器端的連接,告訴服務(wù)器執(zhí)行登錄操作。服務(wù)器收到后,開始通過JDBC讀取數(shù)據(jù)庫,然后與用戶輸入的信息進(jìn)行比對,如果成功,便打開主程序窗口。然后客戶端向服務(wù)器請求讀取好友列表,服務(wù)器收到該請求后從數(shù)據(jù)庫中取出該用戶的好友列表,然后向客戶端發(fā)送這些信息,客戶收到后就在主窗口顯示好友。  用戶登錄流程圖如

40、圖4-4: 圖4-4 登錄流程圖3、實(shí)時聊天模塊 客戶端首先發(fā)送消息到服務(wù)器端,服務(wù)器端程序判斷客戶端發(fā)來的信息類型,如果是普通的聊天消息就根據(jù)發(fā)送者信息和接受者信息進(jìn)行消息轉(zhuǎn)發(fā)。例如客戶端A向客戶端B發(fā)送消息的處理過程如下:首先A向服務(wù)器發(fā)送消息,服務(wù)器程序判斷消息類型,如果是普通的聊天消息,則解析該消息,得到該消息的發(fā)送者A,接受者B。接著判斷B是否在線,如果在線就將消息發(fā)送過去,否則將消息存入數(shù)據(jù)庫。B接收到A發(fā)來的信息,如果是未建立對話窗口,則在屏幕右下角出現(xiàn)彈窗提示。 此外還有群組聊天功能,可以在“官方聊天室”功能中實(shí)現(xiàn)一對多的聊天,即在聊天室發(fā)送的消息是面向所有

41、在線用戶的。 用戶聊天流程圖如圖4-5: 圖4-5 聊天流程圖4、 系統(tǒng)后臺管理模塊  (1)系統(tǒng)服務(wù):服務(wù)器端的管理員可以在這里啟動后臺的服務(wù)器,發(fā)布聊天室公告或者彈窗公告給所有在線用戶。如果未開啟服務(wù)器,則在客戶端無法登錄,并會返回相應(yīng)的消息提示。  (2)用戶管理:可以根據(jù)用戶名或者用戶ID查詢已注冊的用戶詳細(xì)信息,并且可以修改、保存相關(guān)信息。這是一個對數(shù)據(jù)庫的簡單的增刪改查的操作。  第5章 系統(tǒng)詳細(xì)設(shè)計(jì)與實(shí)現(xiàn)5.1 系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)本系統(tǒng)主要分為注冊、登錄、聊天、后臺管理四大模塊。 下面詳細(xì)介紹各個模塊的具體實(shí)現(xiàn)。5.1.1 注冊模塊正如我們使用

42、的QQ一樣,使用之前我們要申請一個QQ號。本系統(tǒng)雖然沒有設(shè)計(jì)這么復(fù)雜的流程,但是也必須在登錄前注冊賬號。只有后臺數(shù)據(jù)庫里存在的用戶才能使用本系統(tǒng)。 注冊界面如圖5-1所示,填完消息點(diǎn)擊注冊即可。 圖5-1 用戶注冊界面此外,信息填寫不完整或填寫有誤將有錯誤提示。此處調(diào)用了JOptionPane對象的showMessageDialog方法,通過設(shè)置該方法的參數(shù)顯示不同類型的提示框。郵箱地址的檢測用到了Java里面的正則表達(dá)式相關(guān)知識,使用Pattern對象對郵箱地址格式的正則式進(jìn)行編譯,再調(diào)用Matcher對象的matches方法判斷用戶輸入的郵箱是否與該格式匹配。注冊完成后,通過JDBC技術(shù)連

43、接MySQL數(shù)據(jù)庫將記錄插入數(shù)據(jù)庫表中。 注冊功能關(guān)鍵代碼(注冊成功窗口)代碼如下:private class RegSuccess extends JDialog implements ActionListenerprivate JTextArea txtInfo = new JTextArea();private JButton btnLogin = new JButton("直接登錄");private JButton btnReturn = new JButton("返回登陸界面");private RegUser user;publi

44、c RegSuccess(RegUser user,Frame owner, boolean modal) super(owner,modal);this.user = user;setSize(250,190);setResizable(false);Toolkit tk=Toolkit.getDefaultToolkit();setLocation(tk.getScreenSize().width-getSize().width)/2,(tk.getScreenSize().height-getSize().height)/2);setTitle("注冊信息");txt

45、Info.setText("恭喜!"+user.getRealname()+",注冊成功!n"+"用戶昵稱:"+user.getNickname()+"n"+"登陸號碼:"+user.getJqnum()+"n"+"登陸密碼:"+user.getPassword()+"n"+"請妥善保管您的號碼和密碼!");txtInfo.setEditable(false);txtInfo.setOpaque(true);txtI

46、nfo.setBackground(this.getBackground();txtInfo.setPreferredSize(new Dimension(200,100);txtInfo.setBorder(new TitledBorder(new LineBorder(Color.DARK_GRAY)," 注冊信息 ");setLayout(new FlowLayout(FlowLayout.CENTER,10,10);btnLogin.addActionListener(this);btnReturn.addActionListener(this);add(txtIn

47、fo);add(btnLogin);add(btnReturn);setVisible(true);public void actionPerformed(ActionEvent e) if(e.getSource()=btnLogin)dispose();RegisterPane.this.dispose();new MainPane(txtServerIP.getText(),Integer.parseInt(txtServerPort.getText(),user.getJqnum(),user.getPassword(),UserState.ONLINESTATE.getState()

48、;if(e.getSource()=btnReturn)dispose();RegisterPane.this.dispose();new LoginPane();網(wǎng)頁上顯示用戶的注冊賬號信息,如圖5-2: 圖5-2 用戶注冊信息5.1.2 登錄模塊登錄模塊用于驗(yàn)證客戶端用戶的合法性,用戶輸入用戶名和密碼后通過Msg對象將其封裝成客戶端消息,通過ObjectInputStream對象寫入socket流中傳給服務(wù)器,服務(wù)器收到客戶端傳來的Msg對象后解析出用戶名和密碼并和數(shù)據(jù)庫的記錄比對,兩者完全正確方可成功登錄。在登錄界面(如圖5-3)驗(yàn)證通過則會進(jìn)入客戶端好友列表界面(如圖5-4),否則彈出

49、一個MessageDialog提示用戶名或密碼錯誤。用戶登錄界面如圖5-3所示: 圖5-3 登錄界面圖客戶端好友列表界面如圖5-4所示: 圖5-4 好友列表界面登錄模塊關(guān)鍵代碼如下:public void login()String name=textField用戶名.getText();String password=new String(pwd密碼.getPassword();if(name.equals("")|password.equals("")JOptionPane.showMessageDialog(this, "用戶名和密碼不能

50、為空!","錯誤",JOptionPane.ERROR_MESSAGE);else try if(cs_TCP=null) cs_TCP=new CS_TCP(MyTools.QQServerIP, MyTools.QQServerPort,this,main); System.out.println("開始檢測用戶名和密碼");cs_TCP.sendMessage(Flag.LOGIN+MyTools.FLAGEND+name+MyTools.SPLIT1+password+MyTools.SPLIT1+main.getServerPort(

51、)+MyTools.SPLIT1+comboBox狀態(tài).getSelectedIndex(); catch (Exception e) JOptionPane.showMessageDialog(null, "連接服務(wù)器失??!請檢查網(wǎng)絡(luò)連接或確保QQ服務(wù)器已啟動!"); 5.1.3 聊天模塊聊天模塊是即時聊天系統(tǒng)的主要功能模塊,本系統(tǒng)開發(fā)的目的就是實(shí)現(xiàn)即時聊天。在好友列表中單擊鼠標(biāo)選中一位好友后雙擊鼠標(biāo),即可打開聊天界面(如圖5-5)。在界面下方的消息輸入框內(nèi)輸入消息內(nèi)容,點(diǎn)擊發(fā)送按鈕,即將消息發(fā)送給對方。點(diǎn)擊表情按鈕,還可以發(fā)送類似QQ表情的消息給對方。聊天界面如圖5-5

52、所示: 圖5-5 聊天界面聊天模塊關(guān)鍵代碼如下:(1)鼠標(biāo)事件,完成鼠標(biāo)進(jìn)入好友List中,選中好友,雙擊與好友進(jìn)行聊天。private class ListMouseAdapter extends MouseAdapterpublic void mouseMoved(MouseEvent e) /System.out.println(e.getSource();if(e.getSource()=listFriend)listFriend.clearSelection();int index = listFriend.locationToIndex(e.getPoint();/System.o

53、ut.println("index:"+index);listFriend.setSelectedIndex(index);public void mouseClicked(MouseEvent e) if(e.getSource()=listFriend )if(e.getClickCount()=2)chatWithFriend();if(e.getButton()=MouseEvent.BUTTON3)popupMenu.show(listFriend, e.getX(), e.getY();return;if(e.getSource()=btnMenu)menu.s

54、how(btnMenu, e.getX()-25, e.getY()-75);if(e.getSource()=btnSys)broadcastwindow.showNow();(2)打開好友聊天窗口。private void chatWithFriend()Object obj = listFriend.getSelectedValue();if(obj instanceof FriendUser)FriendUser friendUser = (FriendUser)obj;int jqnum = friendUser.getJqnum();ChatPane chatPane = chat.get(jqnum);if(chatPane=null)chatPane = new ChatPane(oos,friendUser,selfUser,true);chat.put(jqnum, chatPane);else if(chatPane.isDisplayable()chatPane.setFocusable(true);chatPane.setState(NORMAL);elsechatPane.setVisible(true);package data;import java.io.Serializable;import java.util.Date;5.1.4

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論