基于Java的在線聊天APP設(shè)計(jì)與實(shí)現(xiàn)_第1頁
基于Java的在線聊天APP設(shè)計(jì)與實(shí)現(xiàn)_第2頁
基于Java的在線聊天APP設(shè)計(jì)與實(shí)現(xiàn)_第3頁
基于Java的在線聊天APP設(shè)計(jì)與實(shí)現(xiàn)_第4頁
基于Java的在線聊天APP設(shè)計(jì)與實(shí)現(xiàn)_第5頁
已閱讀5頁,還剩47頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

I第1章緒論1.1研究現(xiàn)狀和背景人們通常所說的聊天軟件,是一種可以進(jìn)行文字傳輸、文件傳輸?shù)墓ぞ?,其在因特網(wǎng)上被廣泛使用。即時(shí)通訊軟件通??梢苑譃閮煞N類型,一種是基于服務(wù)器的,另一種是基于P2P的。隨著信息化的飛速發(fā)展,互聯(lián)網(wǎng)已成為影響人類生存和發(fā)展的一大要素?;ヂ?lián)網(wǎng)技術(shù)對于人類社會生產(chǎn)及生活的全面滲透使得網(wǎng)絡(luò)聊天工具成為了于人而言一種不可或缺的工具。相較于傳統(tǒng)聊天方式,應(yīng)用網(wǎng)絡(luò)聊天工具不僅見長于較低的成本,且在速度及方便性等方面同樣有著突出性優(yōu)勢。REF_Ref10265\w\h[1]即時(shí)通訊工具能夠顯著提高效率和生產(chǎn)力,許多企業(yè)也認(rèn)識到了即時(shí)通訊工具的優(yōu)勢,利用LAN來提供服務(wù),在有效進(jìn)行溝通的過程中快速地執(zhí)行,借此提高了日常工作中的協(xié)同性和反映快捷程度。當(dāng)前市面上也已經(jīng)出現(xiàn)了QQ、微信等聊天工具,但是它們在便捷性之外,娛樂、廣告、游戲等擴(kuò)展功能越來越多,在吸引用戶注意的同時(shí),軟件也愈發(fā)臃腫,網(wǎng)絡(luò)上對于追求純凈聊天工具的呼聲越來越高。因此,有必要開發(fā)一款專注于信息交流的即時(shí)通訊軟件。1.2研究目標(biāo)論文敘述的是一款基于Java的在線聊天軟件,主要用于用戶和用戶間的交流。首先用戶要能夠注冊并登錄軟件,用戶在登錄軟件之后可以通過賬號查找好進(jìn)行添加,用戶與好友間能夠發(fā)送、接收信息,并且信息將被保存于服務(wù)器中。用戶能夠設(shè)置自己的資料卡,完善個(gè)人信息,也可以查看好友資料卡了解好友的信息。除了與好友聊天外用戶還能夠創(chuàng)建或加入群聊與更多用戶實(shí)現(xiàn)聊天。1.3論文組織架構(gòu)本文的結(jié)構(gòu)安排如下:第1章:緒論,介紹本文的研究現(xiàn)狀及背景、研究目標(biāo)和本文的結(jié)構(gòu)安排。第2章:介紹程序的開發(fā)環(huán)境和相關(guān)技術(shù)工具。第3章:系統(tǒng)分析,詳細(xì)介紹了系統(tǒng)開發(fā)的可行性,從技術(shù)、經(jīng)濟(jì)操作、法律方面等介紹,也介紹了系統(tǒng)開發(fā)需求性從功能需求、非功能需求介紹。第4章:系統(tǒng)設(shè)計(jì),對該系統(tǒng)做相應(yīng)設(shè)計(jì),包括功能模塊設(shè)計(jì)和數(shù)據(jù)庫設(shè)計(jì)。第5章:系統(tǒng)實(shí)現(xiàn),對該系統(tǒng)的各個(gè)功能模塊功能進(jìn)行實(shí)現(xiàn)。第6章:系統(tǒng)測試,對該系統(tǒng)主要功能模塊進(jìn)行測試,并展示了測試結(jié)果。結(jié)論:對系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn)進(jìn)行總結(jié),并對今后的發(fā)展進(jìn)行展望。第2章相關(guān)理論和技術(shù)2.1Java簡介Java在誕生之初只是一門面向?qū)ο蟮恼Z言,但如今Java已經(jīng)是世界上使用最廣泛的編程語言之一。Java開始被用于開發(fā)從Web應(yīng)用程序到移動應(yīng)用程序再到批處理應(yīng)用程序的所有內(nèi)容。Java不僅具有廣泛的適用性,其在安全方面的也有很好的表現(xiàn),能有效的降低病毒對于程序的影響。Java語言是靜態(tài)面向?qū)ο缶幊陶Z言的代表,它將面向?qū)ο罄碚撨M(jìn)行了完善的實(shí)施,讓程序員可以用不同的思維方法來進(jìn)行某些復(fù)雜的編程。Java十分簡潔,Java在語言學(xué)習(xí)上比C++更簡單;Java語言能夠跨平臺,只需要編譯一次,代碼便可在任何平臺運(yùn)行,JVM屏蔽了底層操作系統(tǒng)的差異;Java源代碼編寫后需要進(jìn)行一次編譯將源代碼編譯為字節(jié)碼,因此它的運(yùn)行速度很快;Java程序運(yùn)行于JVM中,因此它的安全性也較強(qiáng);Java具有動態(tài)性,其類信息在JVM加載時(shí)會先進(jìn)行初始化。2.2MySQL MySQL是一種以C和C++為基礎(chǔ)的、由各種編譯程序?qū)崿F(xiàn)的、具有很高可移植能力的數(shù)據(jù)庫。它既能支持各種操作系統(tǒng),又能為各種編程語言提供相應(yīng)的應(yīng)用接口。其從算法上對SQL語句進(jìn)行了改進(jìn),使SQL語句的運(yùn)行性能得到了極大的提升,同時(shí)也使SQL語句的運(yùn)行速度得到了極大的提升。MySQL小巧,查詢速度快,并且是免費(fèi)開源的,在本次開發(fā)中已經(jīng)可以滿足要求,因此在本次開發(fā)中選擇了MySQL數(shù)據(jù)庫進(jìn)行數(shù)據(jù)的儲存。2.3Socket介紹Socket是一種被用來將通訊的兩人聯(lián)系在一起的技術(shù),它能夠在他們之間搭建一座通訊的橋梁,從而實(shí)現(xiàn)訊息的傳輸。然后在服務(wù)器端開啟對應(yīng)的端口號,等待客戶機(jī)接入。具體地說:在本系統(tǒng)的運(yùn)作過程中,首先要開啟服務(wù)器,才能開啟服務(wù)器的連線,并偵聽服務(wù)器的連線,隨后等待其它使用者的連線。在收到其它使用者的連結(jié)訊息時(shí),這個(gè)使用者就會得到對應(yīng)的連結(jié)碼連結(jié)到服務(wù)端,進(jìn)而在服務(wù)器和客戶端間建立通訊通道,可以使用寫入Socket來進(jìn)行彼此之間的通信。如果有新的客戶機(jī)請求來進(jìn)行鏈接,服務(wù)器端本身就需要得到一個(gè)新的端口號,來進(jìn)行被占據(jù)的老的端口號的偵聽工作。以方便對新的客戶端請求做出響應(yīng),以此實(shí)現(xiàn)多客戶的服務(wù)功能,讓多個(gè)客戶可以以服務(wù)器為中介,來進(jìn)行簡單、高效的通訊。Socket程序的工作過程:1、建立Socket連接:進(jìn)行通信的一方需要連接另一方時(shí),先對對方的IP地址和端口號進(jìn)行確認(rèn),在確認(rèn)完成后將會發(fā)送連接請求,等待對方回應(yīng)確認(rèn)是否接受自己的連接請求。2、數(shù)據(jù)通信:數(shù)據(jù)通信指的是在已經(jīng)建立的連接通道上進(jìn)行信息傳輸?shù)倪^程。3、關(guān)閉:在信息傳輸完成之后,為了讓其他客戶端的連接更順暢,需要拆除之前所建立的連接通道來釋放被占用的內(nèi)存。Socket信息交互原理圖如圖2.1所示:圖2.1Socket信息交互圖第3章系統(tǒng)分析3.1可行性分析程序的可行性分析在設(shè)計(jì)過程中是十分重要的,完善的分析能夠節(jié)約許多在程序開發(fā)中的成本,為開發(fā)的道路掃清不必要的障礙。因此需要對系統(tǒng)分別進(jìn)行技術(shù)可行性、經(jīng)濟(jì)可行性、操作可行性等方面進(jìn)行全面的分析。3.1.1技術(shù)可行性目前,網(wǎng)絡(luò)技術(shù)還在快速地發(fā)展著,它已經(jīng)與各種企業(yè)和個(gè)人密不可分。與此同時(shí),網(wǎng)絡(luò)技術(shù)的發(fā)展也越來越完善,各種以網(wǎng)絡(luò)技術(shù)為基礎(chǔ)的即時(shí)通訊平臺也逐漸地成為了企業(yè)公司、部門單位用來提升工作效率的一種良好工具。另外,即時(shí)通訊軟件的開發(fā)已經(jīng)擁有了許多成功的實(shí)例,在技術(shù)方面開發(fā)它的并不高,且開發(fā)該軟件所需要的開發(fā)軟件獲取較為簡單,在開發(fā)過程中沒有什么壓力,因此成功開發(fā)是可行的。(1)系統(tǒng)軟件開發(fā)系統(tǒng):能夠支持eclipse或IDEA運(yùn)行的各類系統(tǒng)均可開發(fā)軟件:myeclipse或者eclipseWebServer:JBoss、Weblogic或者tomcat(2)開發(fā)語言Java是一種簡單易用并且具有很強(qiáng)的能力的技術(shù),因?yàn)槠渚哂锌缙脚_的特性,所以在開發(fā)語言中占據(jù)著很大的優(yōu)勢,不僅包括了C++語言中ObjectOriented的特性,還對C中十分復(fù)雜的指針、多繼承等特征進(jìn)行了優(yōu)化。與此同時(shí),還添加了垃圾回收的機(jī)制,從而大大簡化了程序員的開發(fā)過程,并能夠及時(shí)的釋放出存儲空間,讓開發(fā)者不再浪費(fèi)時(shí)間和精力在優(yōu)化空間釋放上。3.1.2經(jīng)濟(jì)可行性基于Java的在線聊天APP開發(fā)需要使用的工具能夠直接在各個(gè)官網(wǎng)免費(fèi)下載,不需要其他的經(jīng)濟(jì)支出;研發(fā)方面,本系統(tǒng)由本人自行開發(fā),通過所學(xué)的知識以及互聯(lián)網(wǎng)完成,并無其它經(jīng)濟(jì)支出。這樣,在即時(shí)通訊軟件的開發(fā)期間,所耗費(fèi)的資源就不會很難供給與維護(hù)了。從軟件價(jià)值角度來看,在軟件設(shè)計(jì)成功后,它可以給使用者帶來方便,同時(shí)它還可以給開發(fā)初學(xué)者帶來一定的借鑒價(jià)值,因此,從上述兩個(gè)角度來看,這一點(diǎn)是可以實(shí)現(xiàn)的。3.1.3操作可行性本系統(tǒng)利用C/S結(jié)構(gòu)、Java語言技術(shù)、JavaSwing和Mysql數(shù)據(jù)庫等技術(shù),使本系統(tǒng)更加有效與穩(wěn)定,使系統(tǒng)設(shè)計(jì)的更加簡單、易操作。這次設(shè)計(jì)的網(wǎng)絡(luò)聊天APP就是其中最基礎(chǔ)的一款應(yīng)用。本軟件只要打開客戶端即可進(jìn)入,操作簡單方便,便于使用者使用。3.1.4法律可行性基于Java的在線聊天APP是由個(gè)人獨(dú)立開發(fā)的項(xiàng)目,不存在版權(quán)等法律糾紛。另外就是本項(xiàng)目的立題沒有不良引導(dǎo),意在幫助人們更方便快捷的溝通,對社會有益的,不存在違法違規(guī)等情況。因此本項(xiàng)目在法律上是完全可行的。3.2需求分析對軟件未來要實(shí)現(xiàn)的功能的假設(shè),也就是需求分析的過程,需要對用戶的需求和目的進(jìn)行確定,然后對目標(biāo)展開分析,并給出解決方案。綜合考量在這其中有什么是必須要完成的,有什么是不能完成的,什么內(nèi)容要注重用戶體驗(yàn),什么內(nèi)容要注重可用性。因此,在開發(fā)該軟件前,對其進(jìn)行需求分析就顯得尤為重要。主要的難點(diǎn)有:供需交流的困難,動態(tài)變化的需求,以及后續(xù)的系統(tǒng)維護(hù)和維修。這對于一個(gè)軟件的壽命來說是非常關(guān)鍵的,需求分析的成果常常可以控制一個(gè)項(xiàng)目的整體發(fā)展趨勢,因此,在項(xiàng)目的開發(fā)中,有必要進(jìn)行需求分析。3.2.1功能需求分析應(yīng)用程序的主要工作是實(shí)現(xiàn)用戶和用戶間的信息交流。用戶首次使用只需通過填寫相應(yīng)的信息來完成賬號的注冊,接著就能使用賬號和密碼登錄客戶端使用程序。用戶能夠通過修改資料卡詳細(xì)自己的個(gè)人信息,也能通過賬號查找用戶添加好友,用戶間能夠消息和傳輸文件,也能夠建立群聊實(shí)現(xiàn)一對多的信息溝通。用戶只需要安裝該應(yīng)用程序就能夠在自己的電腦上使用并完成相應(yīng)操作。數(shù)據(jù)庫為應(yīng)用程序?qū)崿F(xiàn)信息儲存和交換,以上就是在線聊天APP的大體功能。3.2.2非功能需求分析(1)系統(tǒng)的安全性信息的安全性一直是一個(gè)不容置疑的問題,因此為了保證信息的安全性,必須對信息進(jìn)行多重加密。數(shù)據(jù)的一致性和完整性也是任何一個(gè)系統(tǒng)都要確保的,因此,在系統(tǒng)中生成的數(shù)據(jù)都要被定時(shí)地核實(shí)和檢查。另外,也要做好數(shù)據(jù)的備份,以防出現(xiàn)系統(tǒng)突發(fā)故障或者當(dāng)機(jī)而造成的數(shù)據(jù)損失。為了保證該系統(tǒng)能夠安全、有效地、長久地運(yùn)轉(zhuǎn),其需要建立起與之對應(yīng)的網(wǎng)絡(luò)防火墻,與此同時(shí)還需要做好對數(shù)據(jù)進(jìn)行加密工作。一個(gè)好的系統(tǒng)還需要有能夠支持其運(yùn)行的環(huán)境,因此,必須也要考慮到硬件的問題。(2)系統(tǒng)的響應(yīng)時(shí)間對一個(gè)軟件而言,反應(yīng)速度是評價(jià)軟件性能的一項(xiàng)關(guān)鍵因素,因此,在保證軟件功能的前提下,有必要進(jìn)一步提升反應(yīng)速度,從各方面來減少信息傳遞的間隔,使在用戶進(jìn)行登陸與實(shí)時(shí)聊天時(shí),不可以因?yàn)榈却械絽挓?。?)系統(tǒng)的易維護(hù)和易用性聊天系統(tǒng)是為用戶提供的,而用戶可能并不熟悉該系統(tǒng)中的各項(xiàng)設(shè)定,因此在遇到緊急情況時(shí),他們的反應(yīng)速度會比較慢。因此在這個(gè)時(shí)候,就需要要求開發(fā)人員為其提供一個(gè)具有良好的人機(jī)交互界面和各類提示信息。這樣,使用者就可以更好地了解這個(gè)系統(tǒng),并且可以更好地解決一些使用過程中的簡單問題。由于這個(gè)聊天系統(tǒng)是要進(jìn)行長時(shí)間的運(yùn)作,作為開發(fā)者,必須要對用戶在平時(shí)工作過程中可能出現(xiàn)的一些濫用和誤用進(jìn)行處理,在面對這種情況的時(shí)候,開發(fā)者必須要讓這個(gè)系統(tǒng)能夠自動地做出相應(yīng)的緊急措施應(yīng)對,或是給予用戶一定的提醒和引導(dǎo)。(4)系統(tǒng)的先進(jìn)性Socket技術(shù)已經(jīng)很完善了,Socket技術(shù)在用作網(wǎng)絡(luò)通信的時(shí)候也是十分受歡迎的。此外,本系統(tǒng)采用的是跨平臺的Java技術(shù),因此它對多種操作系統(tǒng)具有很好的兼容性。3.3系統(tǒng)流程圖3.3.1客戶端流程圖分析客戶端流程圖如圖3.1所示圖3.1客戶端流程圖3.3.2服務(wù)器端流程圖分析服務(wù)器流程圖如圖3.2所示。圖3.2服務(wù)器流程圖第4章系統(tǒng)設(shè)計(jì)4.1系統(tǒng)設(shè)計(jì)這個(gè)即時(shí)通訊系統(tǒng)采取的是C/S結(jié)構(gòu),它包括了兩個(gè)部分,一個(gè)是服務(wù)器端,一個(gè)是客戶端,服務(wù)器端可以在啟動后監(jiān)聽客戶端的信息的傳遞,還可以進(jìn)行對客戶端的各種監(jiān)視,而客戶端可以利用一個(gè)合理的接口,讓用戶在使用的時(shí)候可以更加便捷地進(jìn)行通信。在這兩個(gè)方面,本應(yīng)用程序進(jìn)行了具體的功能設(shè)計(jì)。其中,服務(wù)器端的功能是為了監(jiān)聽和監(jiān)視客戶端,同時(shí)也是為了對已注冊的用戶進(jìn)行實(shí)時(shí)監(jiān)視,而客戶端的功能則是為了給用戶提供這個(gè)軟件的賬戶的申請和進(jìn)入到操作界面進(jìn)行操作的過程。其中功能包括個(gè)人資料卡的修改以及對于聊天好友和群聊的添加與管理等等。程序的功能圖如圖4.1所示:圖4.1程序功能層次圖4.2數(shù)據(jù)庫概念設(shè)計(jì)數(shù)據(jù)庫是該即時(shí)通訊系統(tǒng)的必不可少的結(jié)構(gòu)之一,數(shù)據(jù)庫模塊主要負(fù)責(zé)對用戶賬號信息和個(gè)人資料卡信息的存儲,進(jìn)行信息處理的各個(gè)環(huán)節(jié)都是基于數(shù)據(jù)庫的,因此可以實(shí)現(xiàn)對各類數(shù)據(jù)的安全、完整的存儲,并進(jìn)行合理的使用。(1)用戶資料實(shí)體圖圖4.2用戶資料實(shí)體圖(2)群聊資料實(shí)體圖圖4.3群聊資料實(shí)體圖好友實(shí)體圖圖4.4好友實(shí)體圖(4)群聊實(shí)體圖圖4.5群聊實(shí)體圖4.3數(shù)據(jù)庫邏輯設(shè)計(jì)數(shù)據(jù)庫的邏輯結(jié)構(gòu)設(shè)計(jì)是把上一階段的實(shí)體圖結(jié)構(gòu)轉(zhuǎn)化成數(shù)據(jù)庫系統(tǒng)中對應(yīng)的邏輯結(jié)構(gòu),其中,數(shù)據(jù)庫模塊的作用是保存用戶賬戶信息和個(gè)人資料卡信息。(1)用戶表users“用戶表users”用來記錄注冊的用戶信息。用戶表的結(jié)構(gòu)如表4.6所示。表4.6基本信息表字段名稱類型長度字段說明主鍵idbirght主鍵主鍵usernumvarchar20賬號signvarchar100簽名namevarchar30昵稱sexvarchar20性別addressvarchar50地址birthvarchar10生日agevarchar5年齡nativeplacevarchar50故鄉(xiāng)iconvarchar10頭像(2)好友表friend“好友表friend”是用來建立好友關(guān)系信息。好友表的結(jié)構(gòu)如表4.7所示。表4.7好友表字段名稱類型長度字段說明主鍵idbright主鍵主鍵usernumvarchar20用戶賬號friendnumvarchar20好友賬號群聊信息表makegroup“群聊信息表makegroup”是用來群聊信息。群聊表的結(jié)構(gòu)如表4.8所示。表4.8群聊信息表字段名稱類型長度字段說明主鍵idbigint主鍵主鍵groupnamevarchar30群名稱groupnumvarchar20群號announcementvarchar100群公告(4)群聊表group“群聊表group”是用來記錄用戶和群聊關(guān)系的信息。群聊表的結(jié)構(gòu)如表4.9所示。表4.9群聊表字段名稱類型長度字段說明主鍵idbigint11主鍵主鍵usernumvarchar30用戶賬號groupnumvarchar30群聊賬號第5章系統(tǒng)實(shí)現(xiàn)該系統(tǒng)采用套接字技術(shù),以MySQL為基礎(chǔ),建立了一套完整的信息傳輸渠道。只需使用IDEA或eclipse來進(jìn)行程序的開發(fā)。在基于Java的在線聊天APP的設(shè)計(jì)過程中,由于數(shù)據(jù)的復(fù)雜性并不高,使用MySQL數(shù)據(jù)庫就可以被開發(fā)并運(yùn)行,已經(jīng)達(dá)到了需要,所以將MySQL數(shù)據(jù)庫用作數(shù)據(jù)的承載。5.1系統(tǒng)運(yùn)行環(huán)境和運(yùn)行工具操作系統(tǒng):windows系統(tǒng)數(shù)據(jù)庫:MySQL8.0以上運(yùn)行工具:eclipse4.4WebServer:JBoss或者tomcatJDK版本:JDK1.85.2啟動服務(wù)器用戶使用程序需要有服務(wù)器作為支撐,管理員需要事先打開服務(wù)器。在保證數(shù)據(jù)庫被啟動的前提下,管理員通過運(yùn)行相應(yīng)的文件,即可啟動服務(wù)器,打開服務(wù)器后會顯示相應(yīng)的服務(wù)器界面,在這個(gè)界面可以對已經(jīng)登錄的用戶進(jìn)行監(jiān)控。服務(wù)器界面如圖5.1所示。圖5.1服務(wù)器界面5.3聊天監(jiān)控在用戶發(fā)送信息時(shí),發(fā)送的信息會顯示在服務(wù)器界面下方框體中,管理員能夠以此對用戶的聊天信息進(jìn)行監(jiān)控。監(jiān)控框體如圖5.2所示。圖5.2監(jiān)控框體5.4賬號注冊登錄如果用戶是首次使用程序,在點(diǎn)擊注冊用戶時(shí)會將界面變換為用戶注冊界面,用戶注冊需要輸入昵稱、賬號、密碼和個(gè)人簽名,并需要再次確認(rèn)密碼,賬號為用戶自己設(shè)定,不可重復(fù)。注冊中的人臉登錄是可選選項(xiàng),如果賬號在注冊時(shí)錄入了人臉圖像,則能在登錄時(shí)直接使用人臉識別進(jìn)行登錄。用戶注冊界面如圖5.3所示。圖5.3角色注冊在用戶輸入的賬號并未被注冊過且輸入的信息符合規(guī)范后,彈出小窗口提示其注冊成功。提示注冊成功窗口如圖5.4所示。圖5.4提示注冊成功實(shí)現(xiàn)該功能的關(guān)鍵代碼如下: @IgnoreAuth @PostMapping(value="/login") publicRlogin(Stringusername,Stringpassword,Stringcaptcha,HttpServletRequestrequest){ UsersEntityuser=userService.selectOne(newEntityWrapper<UsersEntity>().eq("username",username)); if(user==null||!user.getPassword().equals(password)){ returnR.error("賬號或密碼不正確"); } Stringtoken=tokenService.generateToken(user.getId(),username,"users",user.getRole()); returnR.ok().put("token",token); } @IgnoreAuth @PostMapping(value="/register") publicRregister(@RequestBodyUsersEntityuser){ if(userService.selectOne(newEntityWrapper<UsersEntity>().eq("username",user.getUsername()))!=null){ returnR.error("用戶已存在"); }userService.insert(user);returnR.ok();}在用戶登錄頁面中,用戶必須先鍵入自己的帳號和密碼,然后點(diǎn)擊登錄按鈕才能登錄,如果帳號和密碼鍵入正確,就可以直接進(jìn)入首頁。首先確定帳號和密碼已經(jīng)被鍵入到欄中。如果沒有鍵入帳號或口令,則會提醒使用者帳號或密碼未輸入。在輸入帳號和口令之后,該程序?qū)①~號密碼信息傳送至服務(wù)器,并在服務(wù)器上對該帳號和密碼進(jìn)行驗(yàn)證,如果輸入的帳號和密碼是準(zhǔn)確的,則會進(jìn)入主界面。如果使用者輸入的帳號密碼不準(zhǔn)確,系統(tǒng)將顯示“帳號或口令有誤”。用戶登錄界面如圖5.5所示:圖5.5用戶登錄實(shí)現(xiàn)該功能的關(guān)鍵代碼如下。publicstaticvoidlogin(Stringqq,Stringpass,Stringip,intport)throwsException{Sockettotry2=newSocket(ip,port);DataOutputStreamout2=newDataOutputStream(totry2.getOutputStream());DataInputStreamin2=newDataInputStream(totry2.getInputStream());out2.writeUTF(qq);out2.writeUTF(pass);switch(in2.readUTF()){case"false":JOptionPane.showMessageDialog(newJLabel(),"賬號或密碼錯(cuò)誤!","提示",JOptionPane.INFORMATION_MESSAGE);totry2.close();break;case"true":newperson(totry2,in2.readUTF(),qq,ip,port,pass);break;case"onlyone":JOptionPane.showMessageDialog(newJLabel(),"賬號已經(jīng)登錄!","提示",JOptionPane.INFORMATION_MESSAGE);totry2.close();break;default:JOptionPane.showMessageDialog(newJLabel(),"無法連接服務(wù)器!","提示",JOptionPane.INFORMATION_MESSAGE);totry2.close();break;}}如果用戶在注冊賬號時(shí)錄入了人臉圖像,還可以使用人臉識別進(jìn)行登錄,點(diǎn)擊人臉識別按鈕后程序?qū)蜷_攝像頭,通過AI對捕捉到的人臉和錄入圖像的相似度進(jìn)行評分,評分合格則可成功登錄相應(yīng)賬號。人臉識別界面如圖5.6所示。圖5.6人臉識別實(shí)現(xiàn)該功能的關(guān)鍵代碼如下。publicstaticvoidfacelogin2(Stringpath,Stringip,intport){Stringfacepath="d:\\"+path+".png";Stringlog=Sample.FaceSearch(facepath);intscoreweizhi=log.indexOf("score");if(scoreweizhi>0){Stringsc=log.substring(scoreweizhi+8,scoreweizhi+10);intsc2=Integer.parseInt(sc);intscorecontrol=70;if(sc2>=scorecontrol){intuseridweizhi=log.indexOf("user_id");Stringuserid=log.substring(useridweizhi+11);System.out.println("userid"+userid);Stringqq=userid.substring(userid.indexOf("ct")+2,userid.indexOf("PASS"));Stringpass=userid.substring(userid.indexOf("PASS")+4,userid.indexOf("\"",userid.indexOf("PASS")+4));try{login(chat,pass,ip,port);System.out.println("截取密碼:"+pass);}catch(Exceptione){e.printStackTrace();}}else{intwz;Stringerr=log.substring(wz=log.indexOf("score"),log.indexOf(",",wz));JOptionPane.showMessageDialog(newJLabel(),"評分低于"+scorecontrol+"\n"+"得分:"+err,"提示",JOptionPane.INFORMATION_MESSAGE);}}else{intwz;Stringerr=log.substring(wz=log.indexOf("error_msg"),log.indexOf(",",wz));JOptionPane.showMessageDialog(newJLabel(),"識別失敗\n"+err,"提示",JOptionPane.INFORMATION_MESSAGE);System.out.println("識別失敗\n"+err);System.exit(0);}}用戶在成功登錄后進(jìn)入用戶主界面,在這之后便可自行添加好友和加入群聊。主界面如圖5.7所示。圖5.7用戶主界面5.5添加好友群聊用戶通過輸入賬號或者群號添加好友或群聊,在用戶輸入相應(yīng)的賬號后,程序會將賬號信息送至服務(wù)器,判斷賬號輸入是否正確和是否添加過該好友或群聊,在符合要求后將該賬號和添加賬號建立聯(lián)系,實(shí)現(xiàn)添加好友跟群聊。在添加成功后,將會提示好友或群聊添加成功,并且好友和群聊會顯示在相應(yīng)列表中。添加界面如圖5.8所示,添加成功界面如圖5.9所示。

圖5.8添加好友界面圖5.9添加成功界面實(shí)現(xiàn)該功能的重要代碼如下。if(qqhao.length()>0){out.writeUTF("%%%");Stringaddsql="insertintoQQfriend(qqid,friend)"+"values("+myqq+","+qqhao+");";Stringaddsql2="insertintoQQfriend(qqid,friend)"+"values("+qqhao+","+myqq+");";Stringchasql="selectqqid"+"fromQQpersoninfo"+"whereqqid="+qqhao+";";out.writeUTF(chasql);if(in.readUTF().equals("成功")){cli.close();Socketcli2=newSocket(ip,port);DataOutputStreamout2=newDataOutputStream(cli2.getOutputStream());DataInputStreamin2=newDataInputStream(cli2.getInputStream());out2.writeUTF("%%%");out2.writeUTF(addsql+addsql2);if(in2.readUTF().equals("成功"))JOptionPane.showMessageDialog(qq,"好友添加成功","提示",JOptionPane.INFORMATION_MESSAGE);cli2.close();}else{JOptionPane.showMessageDialog(qq,"用戶不存在","提示",JOptionPane.INFORMATION_MESSAGE);}}5.6創(chuàng)建群聊點(diǎn)擊創(chuàng)建群聊跳轉(zhuǎn)創(chuàng)建群聊界面,輸入群昵稱和群號即可完成創(chuàng)建群聊。創(chuàng)建群聊界面界面如圖5.10所示。圖5.10創(chuàng)建群聊界面實(shí)現(xiàn)該功能的重要代碼如下。try{cli=newSocket(ip,port);out=newDataOutputStream(cli.getOutputStream());in=newDataInputStream(cli.getInputStream());}catch(UnknownHostExceptione1){e1.printStackTrace();}catch(IOExceptione1){e1.printStackTrace();}try{Stringsql1="insert"+"intoQQquninfo(qid,qgonggao,qname,qowner,qtx)values("+qid.getText()+",'"+gg.getText()+"','"+qname.getText()+"',"+myqq+","+icontxt.getText()+")"+";";Stringsql2="insert"+"intoQQqunmember(qid,qmember)values("+qid.getText()+","+myqq+")"+";";out.writeUTF("%%%");out.writeUTF(sql1+sql2);if(in.readUTF().equals("成功")){JOptionPane.showMessageDialog(gg,"創(chuàng)建成功!","提示",JOptionPane.INFORMATION_MESSAGE);}else{JOptionPane.showMessageDialog(gg,"創(chuàng)建失敗","提示",JOptionPane.INFORMATION_MESSAGE);}5.7好友列表和群聊列表添加好友和群聊后,好友會顯示在好友列表界面,群聊會顯示在群聊列表界面。程序通過循環(huán)讀取好友連接信息和群聊連接信息更新對應(yīng)的列表。好友列表界面和群聊列表界面如圖5.11所示。

圖5.11好友列表和群聊列表實(shí)現(xiàn)該功能的重要代碼如下。publicvoidhuaone(Stringname,Stringicon,Stringqqid,String[]oneinfo){Filedir=newFile(".//chatrecord");Filemydir=newFile(".//chatrecord//#"+myqq);if(!dir.exists()){dir.mkdirs();}if(!mydir.exists()){mydir.mkdirs();}Stringrecordpath=".//chatrecord//#"+myqq+"http://#"+qqid+"#"+myqq+".txt";Filemyrecord=newFile(recordpath);if(!myrecord.exists()){try{myrecord.createNewFile();}catch(IOExceptione){e.printStackTrace();}}5.8消息發(fā)送點(diǎn)擊好友或群聊頭像進(jìn)行即時(shí)通訊,在聊天框體內(nèi)輸入文字,點(diǎn)擊發(fā)送,對方即可收到消息。服務(wù)器通過接聽指定端口是否有客戶端發(fā)送鏈接請求,在調(diào)用方法接收請求建立鏈接,通過IO流進(jìn)行服務(wù)器端和客戶端的信息交流,再將信息發(fā)送給另一個(gè)指定客戶端,以此完成信息。此后用戶的聊天記錄都將被保存于服務(wù)器中,在重新登錄后不會清除。消息發(fā)送如圖5.12所示。圖5.12消息發(fā)送實(shí)現(xiàn)該功能的重要代碼如下。privateStringreceive(){Stringstr="";try{str=dis.readUTF();}catch(IOExceptione){flag=false;CloseUtil.CloseAll(dis,dos);Server.list.remove(this);}returnstr;}privatevoidsend(Stringstr){try{if(str!=null&&str.length()!=0){dos.writeUTF(str);dos.flush();}}catch(Exceptionexception){flag=false;CloseUtil.CloseAll(dos,dis);Server.list.remove(this);}}5.9文件傳輸點(diǎn)擊發(fā)送文件可選擇文件進(jìn)行發(fā)送,使用IO字節(jié)流進(jìn)行傳輸,能夠發(fā)送各種圖片、音頻、視頻、文檔等各類格式文件。文件發(fā)送成功后,點(diǎn)擊窗口左邊下載文件即可選擇磁盤保存文件。文件傳輸如圖5.13所示。圖5.13文件傳輸實(shí)現(xiàn)該功能的重要代碼如下。publicstaticbyte[]file2ByteArr(Filefile){FileInputStreamfis=null;ByteArrayOutputStreambos=newByteArrayOutputStream(1000);try{fis=newFileInputStream(file);byte[]b=newbyte[1000];intn;while((n=fis.read(b))!=-1){bos.write(b,0,n);}byte[]data=bos.toByteArray();returndata;}catch(Exceptione){returnnull;}finally{if(fis!=null){try{fis.close();}catch(IOExceptione){e.printStackTrace();}}try{bos.close();}catch(IOExceptione){e.printStackTrace();}}}5.10更改個(gè)人資料卡在用戶登錄成功之后,用戶可以點(diǎn)擊主界面中的個(gè)人頭像,將會彈出一個(gè)個(gè)人資料卡的窗口,用戶可以通過點(diǎn)擊相應(yīng)內(nèi)容修改個(gè)人資料,然后可以選擇修改新信息到服務(wù)器上。在將信息發(fā)送到服務(wù)器之前,將會先對信息進(jìn)行格式判斷。當(dāng)用戶在修改的個(gè)人資料卡成功后,用戶的頭像,昵稱,個(gè)性簽名等將會在主界面中改變,如未修改成功,將不會改變。個(gè)人資料卡修改界面如圖5.14所示。圖5.14個(gè)人資料卡修改實(shí)現(xiàn)該功能的重要代碼如下。try{Stringsql1="updateQQpersoninfo"+"setqqname='"+name.getText()+"'"+"whereqqid="+myqq+";";Stringsql2="updateQQpersoninfo"+"setqqqianming='"+qm.getText()+"'"+"whereqqid="+myqq+";";Stringsql3="updateQQpersoninfo"+"setqqpassword='"+pass.getText()+"'"+"whereqqid="+myqq+";";Stringsql4="updateQQpersoninfo"+"setqqicon='"+icontxt.getText()+"'"+"whereqqid="+myqq+";";Stringsql5="updateQQpersoninfo"+"setbak1='"+bak1.getText()+"'"+",bak2='"+bak2.getText()+"'"+",bak3='"+bak3.getText()+"'"+",bak4='"+bak4.getText()+"'"+",bak5='"+bak5.getText()+"'"+",bak6='"+bak6.getText()+"'"+"whereqqid="+myqq+";";out.writeUTF("%%%");out.writeUTF(sql1+sql2+sql3+sql4+sql5);if(in.readUTF().equals("成功")){JOptionPane.showMessageDialog(qm,"修改成功!","提示",JOptionPane.INFORMATION_MESSAGE);}else{JOptionPane.showMessageDialog(qm,"修改失敗","提示",JOptionPane.INFORMATION_MESSAGE);}5.11查看資料卡在主界面右鍵好友頭像出現(xiàn)右鍵菜單,點(diǎn)擊查看資料即可查看好友或群聊資料。操作界面如圖5.15所示;好友資料卡界面如圖5.16所示;群聊資料卡界面如圖5.17所示。圖5.15右鍵操作界面圖5.16好友資料卡圖5.17群聊資料卡5.12刪除好友和群聊在主界面右鍵點(diǎn)擊頭像,出現(xiàn)右鍵菜單欄,選擇點(diǎn)擊“退出群”或“刪除好友”即可對群聊和好友進(jìn)行刪除,刪除成功后提示“已經(jīng)刪除好友”或“已經(jīng)退出群”,并重構(gòu)好友列表和群聊列表。界面如圖5.18所示。圖5.18刪除好友提示實(shí)現(xiàn)該功能的重要代碼如下。try{cli=newSocket(ip,port);DataOutputStreamout=newDataOutputStream(cli.getOutputStream());DataInputStreamin=newDataInputStream(cli.getInputStream());out.writeUTF("%%%");Stringsql1="delete"+"fromqqfriend"+"whereqqid="+myqq+"andfriend="+qq+";";Stringsql2="delete"+"fromqqfriend"+"whereqqid="+qq+"andfriend="+myqq+";";out.writeUTF(sql1+sql2);Stringflag=in.readUTF();if(flag.equals("成功")){JOptionPane.showMessageDialog(look,"已經(jīng)刪除好友","提示",JOptionPane.INFORMATION_MESSAGE);}}第6章系統(tǒng)測試在一個(gè)軟件的發(fā)展中,其中一個(gè)重要的環(huán)節(jié)就是測試。在開發(fā)過程中,程序難免會有缺陷,所以要去尋找和處理那些缺陷,這就是系統(tǒng)測試所要實(shí)現(xiàn)的目標(biāo)。編程人員在完成某個(gè)功能模塊的設(shè)計(jì)之后,通常要對該軟件進(jìn)行一系列的測試,也就是所謂的“單元測試”。當(dāng)一個(gè)完整的應(yīng)用軟件被開發(fā)出來以后,還需要對這個(gè)軟件進(jìn)行全面的功能測試,從而找到這個(gè)軟件中的漏洞。軟件測試的意義就是,它的第一個(gè)目的就是保證軟件的品質(zhì),第二個(gè)目的就是對功能能否達(dá)到自己的期望,進(jìn)行一種測驗(yàn),最后再對會不會出現(xiàn)與期望的不一樣的結(jié)果。黑盒測試是測試系統(tǒng)整體功能的一種手段,TESTERS首先從用戶的角度來看待黑盒,比較符合預(yù)期的功能測試用例,并幫助識別系統(tǒng)中存在的問題。黑盒測試主要采用位移分析和閾值分析。系統(tǒng)錯(cuò)誤經(jīng)常發(fā)生在輸入和輸出值邊界上,概率比內(nèi)部高得多,因此閾值分析進(jìn)一步確定了系統(tǒng)的穩(wěn)定性和可靠性,在確定輸入和輸出范圍后選擇操作系統(tǒng)閾值來測試系統(tǒng)。6.1測試步驟單元、集成和核實(shí)測試為系統(tǒng)測試的主要三步驟。(1)單元測試是測試系統(tǒng)的最小功能模塊。對該模塊進(jìn)行性能檢測,以判定其性能與所定義的性能要求是否相符。(2)集成測試是模塊安裝后的完整系統(tǒng),能夠?qū)M件間的界面、通訊進(jìn)行檢測,并對與設(shè)計(jì)有關(guān)的編程結(jié)構(gòu)進(jìn)行驗(yàn)證。(3)核實(shí)測試是是為了確保系統(tǒng)配置的正確性,對用戶進(jìn)行分析時(shí)所需的數(shù)據(jù)進(jìn)行確認(rèn),以確定用戶所需的數(shù)據(jù)是否與所需數(shù)據(jù)一致。6.2測試預(yù)期結(jié)果在即時(shí)通訊系統(tǒng)中,初步預(yù)估目標(biāo)應(yīng)是:服務(wù)器能夠正常啟動。用戶能夠注冊賬號。用戶能夠登錄賬號。用戶能夠添加好友和群聊。用戶能夠發(fā)送文件。6.3測試用例程序的功能測試預(yù)期需要結(jié)合實(shí)際數(shù)據(jù)經(jīng)行檢測,再將得到的結(jié)果與預(yù)期結(jié)果進(jìn)行比較。將結(jié)果對比分析。若所得到的結(jié)果與期望的有出入,則測試失敗。如果運(yùn)行結(jié)果與期望的一致,則測試通過。6.3.1服務(wù)器啟動測試啟動服務(wù)器是運(yùn)行程序的首要步驟,能夠啟動成功則是通過。如表6.1所示。表6.1服務(wù)器啟動測試表測試編號測試目的操作步驟預(yù)期結(jié)果實(shí)際結(jié)果001服務(wù)器啟動未連接數(shù)據(jù)庫啟動失敗啟動失敗002服務(wù)器啟動無網(wǎng)絡(luò)連接啟動失敗啟動失敗003服務(wù)器啟動已連接數(shù)據(jù)庫及網(wǎng)絡(luò)啟動成功啟動成功6.3.2注冊測試用例用戶在注冊時(shí)填寫的信息符合規(guī)范則可注冊成功。如表6.2所示。表6.2注冊測試用例表測試編號測試目的操作步驟預(yù)期結(jié)果實(shí)際結(jié)果001注冊測試不填寫任何數(shù)據(jù)注冊失敗注冊失敗002注冊測試不填寫個(gè)性簽名注冊成功注冊成功003注冊測試輸入兩次密碼不一致注冊失敗注冊失敗004注冊測試頭像超過限制注冊失敗注冊失敗005注冊測試不填寫昵稱注冊失敗注冊失敗006注冊測試個(gè)性簽名過長注冊失敗注冊失敗007注冊測試填寫正確內(nèi)容注冊成功注冊成功008注冊測試不錄入人臉登錄注冊成功注冊成功6.3.3登錄測試用例用戶通過輸入正確的賬號密碼登錄賬號。如表6.3所示。表6.3登錄測試用例表測試編號測試目的操作步驟預(yù)期結(jié)果實(shí)際結(jié)果001登錄測試輸入正確的用戶名和密碼登錄成功登錄成功002登錄測試不輸入內(nèi)容登錄失敗登錄失敗003登錄測試未輸入密碼登錄失敗登錄失敗004登錄測試未輸入賬號登錄失敗登錄失敗005登錄測試輸入錯(cuò)誤的密碼登錄失敗登錄失敗6.3.4添加好友測試用例用戶在添加好友時(shí),需要輸入正確的好友賬號。如表6.4所示。表6.4添加好友測試用例表測試編號測試目的操作步驟預(yù)期結(jié)果實(shí)際結(jié)果001添加好友測試輸入正確的好友賬號添加成功添加成功002添加好友測試輸入錯(cuò)誤的好友賬號添加失敗添加失敗003添加好友測試添加已添加過的好友添加失敗添加成功6.3.5添加群聊測試用例用戶在添加群聊時(shí),需要輸入正確的群聊賬號。如表6.5所示。表6.5添加群聊測試用例表測試編號測試目的操作步驟預(yù)期結(jié)果實(shí)際結(jié)果001添加群聊測試輸入正確的群號添加成功添加成功續(xù)表6.5添加群聊測試用例表測試編號測試目的操作步驟預(yù)期結(jié)果實(shí)際結(jié)果002添加群聊測試輸入錯(cuò)誤的群號添加失敗添加失敗003添加群聊測試添加已添加的群聊添加失敗添加失敗6.3.6發(fā)送文件測試用例用戶在聊天時(shí)可以發(fā)送各類格式的文件。如表6.6所示。表6.6發(fā)送文件測試用例表測試編號測試目的操作步驟預(yù)期結(jié)果實(shí)際結(jié)果001發(fā)送文件測試發(fā)送png格式文件發(fā)送成功發(fā)送成功002發(fā)送文件測試發(fā)送mp4格式文件發(fā)送成功發(fā)送成功003發(fā)送文件測試發(fā)送mp3格式文件發(fā)送成功發(fā)送成功004發(fā)送文件測試發(fā)送doc格式文件發(fā)送成功發(fā)送成功005發(fā)送文件測試發(fā)送psd格式文件發(fā)送成功發(fā)送成功6.4測試結(jié)論經(jīng)過使用多個(gè)測試用例對系統(tǒng)的部分功能進(jìn)行了全面測試,整個(gè)系統(tǒng)在測試過程中,不管是從系統(tǒng)的功能上、還是從系統(tǒng)的使用上,基本上都能達(dá)到當(dāng)初預(yù)計(jì)的結(jié)果。結(jié)論通過數(shù)個(gè)月的學(xué)習(xí)與努力,終于完成了本次畢業(yè)設(shè)計(jì)題目的設(shè)計(jì)和實(shí)現(xiàn)。本文通過對開發(fā)基于Java的在線聊天APP相關(guān)技術(shù)的研究,針對目前市面上常用的即時(shí)通訊軟件進(jìn)行分析,解決它們被廣大用戶詬病的問題。隨著社會的快速發(fā)展,傳統(tǒng)的信息交流方式已經(jīng)不能滿足人們的日常需求,而現(xiàn)今人們的生活也已經(jīng)無法離開即時(shí)通訊軟件。本次設(shè)計(jì)摒棄了大多數(shù)聊天軟件臃腫的設(shè)計(jì),在界面設(shè)計(jì)上簡潔美觀,操作上簡單方便,實(shí)現(xiàn)了一對一以及一對多高效、快捷、簡潔的信息交流,同樣解放了用戶使用軟件的內(nèi)存壓力和儲存壓力。本系統(tǒng)仍然有許多不足之處,本次設(shè)計(jì)雖然已經(jīng)完成了一款即時(shí)通訊系統(tǒng)的重要功能,但由于技術(shù)限制尚不能完成視頻聊天和語音聊天功能,僅僅是能使用文字交流和文件傳輸,在日常使用這方面尚顯不足,所使用的JavaSwing在界面設(shè)計(jì)精美度上不如其他技術(shù),后期仍需要一定的優(yōu)化,在接下來的工作中仍需鞏固技能,提高水平,使系統(tǒng)其趨于完善。參考文獻(xiàn)[1]歐陽桂秀.基于Java和MySQL的數(shù)據(jù)庫管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].信息記錄材料,2022,23(09):240-242.[2]蘇碧霞.探析JavaSwing工具包在圖形用戶界面設(shè)計(jì)中的應(yīng)用[J].信息與電腦,2019(10):151-152.[3]張丹丹.淺析JavaSwing組件窗體設(shè)計(jì)[J].電腦知識與技術(shù),2020,16(21):160-161.[4]王素蘋.一種基于JavaSwing的網(wǎng)絡(luò)聊天室的設(shè)計(jì)與實(shí)現(xiàn)[J].現(xiàn)代計(jì)算機(jī)(專業(yè)版),2020(20):64-67.[5]張丹丹.淺析使用模型參數(shù)構(gòu)造JavaSwing組件[J].電腦知識與技術(shù),2020,16(26):214-215.[6]金瀾.MySQL索引是如何形成的[J

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論