【正文】
在整個設(shè)計過程中,在老師的指導和許多同學的共同幫助下,及時總結(jié)成果,這些無疑會對我今后的工作和學習帶來很大的幫助。通過這次畢業(yè)設(shè)計,本人在 Java Socket 通信機制的學習上受益匪淺,明白了 Socket 通信的基本原理,并能夠用 Java Socket 實現(xiàn)簡單的局域網(wǎng)通信系統(tǒng)。 通過本次畢業(yè)設(shè)計,本人對 Java 的認識水平有了極大的提高。 41 致 謝 近兩個月的的忙碌,本次畢業(yè)設(shè)計已經(jīng)接近尾聲,作為一個本科生的畢業(yè)設(shè)計,由于經(jīng)驗的缺乏,難免有許多考慮不周的地方,如果沒有指導老師的督促指導,以及其他同學的支持,想要完成這個設(shè)計是非常困難的。生成的聊天室可以達到基本的局域網(wǎng)聊天要求,具有較高的學習價值和深入的研究價值。 本次畢業(yè)設(shè)計所設(shè)計開發(fā)的系統(tǒng)著重研究并實現(xiàn)了 Socket 網(wǎng)絡(luò)通訊應(yīng)用的部分。并且在這一重要而復雜的領(lǐng)域進行了相關(guān)的實踐開發(fā),不管是對自我的自學能力、研究能力,還是實踐動手能力、資料查閱能力,都起到了非常大的促進作用和推動作用。 在當今網(wǎng)絡(luò)遍布的世界,一個簡單高效的局域網(wǎng)通信工具是非常有實用價值和研究價值的。 40 第五章 結(jié)論 本次畢業(yè)設(shè)計主要應(yīng)用了 Java 下的 Socket 編程實現(xiàn)了一個局域網(wǎng)的通信軟件,基本滿足了系統(tǒng)結(jié)構(gòu)化、界面友好、速度快、占用資源少、穩(wěn)定等特點。 客戶端 客戶端能夠通過正確的賬號和密碼進行登錄 客戶端能夠?qū)崿F(xiàn)在線注冊; 客戶端實現(xiàn)了點對點、點對多、多對多的聊天模式; 客戶端能夠改變聊天字體風格; 客戶端能夠選擇切換私聊或者群聊; 客戶端右上角能顯示當前的時間; 客戶端能夠保存聊天信息到本地 txt 文件; 客戶端能夠讀取聊天歷史記錄; 客戶端退出并向所有用戶廣播 退出消息; 客戶端正常退出。 系統(tǒng)功能特點及改進 本次畢業(yè)設(shè)計所設(shè)計的局域網(wǎng)聊天系統(tǒng),基本上實現(xiàn)了局域網(wǎng)通信功能。//執(zhí)行數(shù)據(jù)庫語句 return。)。,39。,39。,39。,39。// sql = insert into userInfo(userName,userPwd,sex,age,) values( 39。 return。 while(()){ flag = true。 ResultSet rs = (sql)。 SqlConn sq = new SqlConn()。 String sql = select * from userInfo where userName=39。 return。){ flag++。i++){ if(().charAt(i)==39。 for(int i = 0。 return。 } /** * 輸入內(nèi)容合法性驗證 */ //年齡合法性驗證 int age = (())。 } //年齡有無驗證 if(()==0){ (null, 年齡不能為空 ! )。 } //兩次密碼輸入是否相同驗證 if(!(())){ (null, 兩次輸入密碼不一致! )。 } //密碼有無驗證 if(()==0){ (null, 密碼不能為空! )。 /** * 對得到的注冊用戶信息進行驗證 */ //用戶名有無驗證 if(()==0){ (null, 用戶名不能為空! )。 31 = ()?男 :女 。 = ()。部分代碼如下, 客戶端判斷: //用戶注冊 SuppressWarnings(deprecation) private void registNewUser() { // TODO Autogenerated method stub //從輸入框接收用戶注冊詳細信息并賦給封裝的注冊用戶信息類對象 RegistUserInfo registUserInfo = new RegistUserInfo()。如果輸入正確的用戶名和密碼,就會登錄到聊天室 ChatRoom 主界面。一旦服務(wù)器關(guān)閉了服務(wù),那么客戶端會知道服務(wù)器已經(jīng)停止了服務(wù),并且彈出“無法連接到服務(wù)器”的對話框,客戶端也會停止工作。其主界面如下圖 42, 43 所示, 20 圖 42 服務(wù)器主界面 圖 43 服務(wù)器用戶管理主界面 21 服務(wù)器的開啟 點擊啟動服務(wù)器按鈕,便可以啟動服務(wù)器,服務(wù)器開始提供服務(wù)。 19 第四章 系統(tǒng)的實現(xiàn) 服務(wù)器的設(shè)計與實現(xiàn) 服務(wù)器工作流程圖 服務(wù)器的主要工作室配置服 務(wù)器并且啟動服務(wù)器,服務(wù)器啟動后對用戶進行管理,包括在線用戶管理,踢出違規(guī)用戶,記錄用戶聊天信息等。 數(shù)據(jù)庫設(shè)計 由于本局域網(wǎng)聊天系統(tǒng)主要是以 提供聊天服務(wù)為主要目標,所以所設(shè)計的數(shù)據(jù)庫表只有簡單的兩張,一張用來存儲用戶信息,一張用來存儲用戶的聊天信息,如下圖 35,36 所示, 圖 35 用戶信息表 用戶信息表主要包括了用戶名、密碼、年齡、性別、郵箱 5 個數(shù)據(jù),分別用來存儲用戶的用戶名、密碼、年齡、性別、郵箱。 相應(yīng)的客戶端的設(shè)計要比服務(wù)器簡單, Login 類負責實現(xiàn)登陸, Register 類負責實現(xiàn)用戶注冊, ChatRoom 類實現(xiàn)用戶的聊天功能,其中 ChatRoom 單獨用一個線程 18 來處理其具體的操作。 架構(gòu)設(shè)計 本系統(tǒng)中,服務(wù)器端設(shè)計兩個線程,一個用來處理客戶端連接請求的監(jiān)聽線程,一旦監(jiān)聽到 Socket 連接請求,服務(wù)器便進入 Connection 線程工作,處理客戶端 相應(yīng)請求的操作,比如登陸、注冊、發(fā)送消息、退出等操作。協(xié)議設(shè)計就是規(guī)定服務(wù)器的 IP 和默認的端口號( PORT),服務(wù)器在該 IP 和端口號監(jiān)聽客戶端的連接請求。用戶登陸聊天時,將實現(xiàn)統(tǒng)一的用戶登陸驗證機制。本系統(tǒng)在架構(gòu)設(shè)計上將分成 3 個層次,如下圖 35所示, 聊 天 應(yīng) 用 層接 口 層Socket底 層 圖 35 聊天系統(tǒng)設(shè)計層次模型圖 本系統(tǒng)最底層的是 Socket 通信層,負責將客戶端與服務(wù)器之間連接起來,并建立 I/O 通道,實現(xiàn)客戶端與服務(wù)器的數(shù)據(jù)傳輸。 17 系統(tǒng)設(shè)計 設(shè)計原則 考慮到系統(tǒng)的可重用性和易維護性,需要將本系統(tǒng)的網(wǎng)絡(luò)底層通信和應(yīng)用系統(tǒng)分開,做到結(jié)構(gòu)分明、各功能模塊清晰。客戶端工作模式如下圖 34 所示, 啟 動 客 戶 端C l i e n t用 戶 登 陸 窗 體L o g i n用 戶 登 陸 窗 體R e g i s t e r進 入 聊 天 室C h a t R o o mL i s t e n e r注 冊 窗 體 時 間 監(jiān) 聽 圖 34 客戶端工作模式圖示 首先我們會啟動客戶端,進入類似 登陸的登陸界面 Login,上面有登陸用戶名和密碼輸入框和登陸按鈕,如果用戶輸入正確的用戶名和密碼就會直接進入ChatRoom,如果此時有其他在線用戶,用戶就可以與他們進行即時聊天了。注冊是對用戶開放注冊功能,從而能讓注冊過的用戶進入聊天室。然后服務(wù)器便會執(zhí)行相應(yīng)線程里面相應(yīng)的操作流程,比如用戶登陸、用戶注冊、用戶聊天信息轉(zhuǎn)發(fā)等等。服務(wù)器功能具體的實現(xiàn)方式如下圖 33 所示, 服 務(wù) 器 端 監(jiān) 聽 控 制 窗 體S e r v e r F r a m eS e r v e r L i s t e n T h r e a d啟 動 服 務(wù) 器 監(jiān) 聽 線 程 一 直 監(jiān) 聽 客 戶 端 的 請 求C o n n e c t i o nS t o p關(guān) 閉 服 務(wù) 器 停 止 服 務(wù) 圖 33 服務(wù)器工作模式圖示 開啟服務(wù)器時會進入服務(wù)器控制主界面,上面標明了服務(wù)器的 IP、端口號等重 16 要信息,管理者可以點擊開啟按鈕啟動服務(wù)器。服務(wù)器與客戶端連接和傳遞數(shù)據(jù)具體實現(xiàn)的原理如下圖 32 所示: 15 S o c k e t 請 求 建 立 連 接客 戶 端服 務(wù) 器S e r v e r S o c k e t 監(jiān) 聽 到請 求 并 建 立 一 個 與客 戶 端 通 信 的 專 用S o c k e tI / O 通 道 建 立 成 功 后 開 始 通 信向 服 務(wù) 器 發(fā) 送 S o c k e t連 接 請 求O u t p u t S t r e a mI n p u t S t r e a m O u t p u t S t r e a mI n p u t S t r e a m流 對 象 往 返 于 客 戶 端 與 服 務(wù)器 之 間 傳 輸 數(shù) 據(jù) 實 現(xiàn) 通 訊每 次 完 成 傳 輸 便 關(guān)閉 流 和 S o c k e t每 次 完 成 傳 輸 便 關(guān)閉 流 和 S o c k e t 圖 32服務(wù)器與客戶端實現(xiàn)數(shù)據(jù)交互通信原理圖 各個模塊功能詳解 服務(wù)器端結(jié)構(gòu) 服務(wù)器的工作主要是負責對客戶端請求的不斷監(jiān)聽,它一直處于擁塞狀態(tài),直到有客戶端發(fā)出連接請求為止。綜合以上因素,我對本次畢業(yè)設(shè)計所要做的的工作做了以下的總結(jié): 在 Inter 上的聊天程序一般都是以服務(wù)器提供服務(wù)端連接響應(yīng),使用者通過客戶端程序登錄到服務(wù)器,就可以與登錄在同一服務(wù)器上的用戶交談,這是一個面向連接的通信過程。本次畢業(yè)設(shè)計的聊天軟件所用到的是 C/S 模式,即需要一個服務(wù)器和一個客戶端項目,最后兩個項目完成通信過程。 系統(tǒng)功能需求 既然該 課題的可行性是已經(jīng)確定,那么我們就可以開始分析其具體的功能需求。 綜上所述 ,本系統(tǒng)的設(shè)計與開發(fā)在經(jīng)濟上、軟件上和硬件設(shè)備上的條件都是滿足的。 運行可行性 :本系統(tǒng)為一個小型的局域網(wǎng)聊天系統(tǒng) ,所耗費的資源比較少,只要安裝了運行該程序所必要的軟件后,就目前的電腦,都是能夠運行的。 技術(shù)可行性 :本系統(tǒng)的開發(fā)是利用 SQL Server 2020 作為本 系統(tǒng)的后臺數(shù)據(jù)庫的 ,它是一個支持多用戶的新型數(shù)據(jù)庫 ,適用于中小規(guī)模的數(shù)據(jù)量需求。 13 第三章 系統(tǒng)分析與設(shè)計 系統(tǒng)分析 系統(tǒng)可行性分析 經(jīng)濟可行性 :由于本系統(tǒng)的主要背景是畢業(yè)設(shè)計,不考慮到直接的經(jīng)濟效益和其后的商業(yè)發(fā)展,而只在于注重自身水平和能力的提高。 AWT 組件 AWT 是 Abstract Window Toolkit (抽象窗口工具包 )的縮寫,這個工具包提供了一套與本地圖形界面進行交互的接口。 JDBC 由一組用 Java 語言編寫的類和接口組成,通過調(diào)用這些類和接口所提供的方法,用戶能夠以一致的方式連接多種不同的數(shù)據(jù)庫,從而可使用標準的 SQL 語言來存取數(shù)據(jù)庫中的數(shù)據(jù),不必再為每一種數(shù)據(jù)庫系統(tǒng)編寫不同的 Java 代碼。 JDK 是整個 Java 的核心,包括了 Java 運行環(huán)境 、 Java 工具和 Java 基礎(chǔ)的類庫。 JDK(Java Development Kit)是 Sun Microsystems 針對 Java 開發(fā)員的產(chǎn)品。就其本身而言, 12 它只是一個框架和一組服務(wù),用于通過插件組件構(gòu)建開發(fā)環(huán)境。本次畢業(yè)設(shè)計所要用到的組件包括 Eclipse 平臺, JDK 解釋器, AWT 組件庫, SQL Server 2020 等。也就是說在 Java 環(huán)境下,我們使用 TCP/IP 協(xié)議的網(wǎng)絡(luò)編程需要采用 Socket 機制。 Socket 所支持的協(xié)議不光有 TCP/IP,還有 UDP。 Socket 通常用來實現(xiàn)客戶端和服務(wù)器的連接。 11 在 C/S 模式中 , 作為客戶機的計算機都要安裝客戶機程序 , 一旦軟件系統(tǒng)升級 , 每臺客戶機都要安裝客戶機程序 , 系統(tǒng)升級和維護較為復雜 。 C/S 模式配備的是點對點的結(jié)構(gòu)模式 , 適用于局域網(wǎng) , 有可靠的安全性 。 在 C/S 模式的工作過程中 , 客戶機程序發(fā)出請求 , 服務(wù)器程序接收并且處理客戶機程序提出的請求 , 然后返回結(jié)果 。 就使用 UDP 發(fā)消息,因此有時會出現(xiàn) 你發(fā)送了消息后,會出現(xiàn)發(fā)送消息失敗的結(jié)果 。正因為 UDP 協(xié)議沒有連接的過程,所以它的通信效率高 。例如,在默認狀態(tài)下,一次 “ping”操作發(fā)送 4個數(shù)據(jù)包 , 發(fā)送的數(shù)據(jù)包數(shù)量是 4包,收到的也是 4包(因為對方 主機 收到后會發(fā)回一個確認收到的數(shù)據(jù)包)。它是 “ 面向非連接 ” 的協(xié)議,它不 會 與對方建立連接,而是直接就把 數(shù)據(jù)包 發(fā)送過去! UDP 適用于一次只傳送少量數(shù)據(jù)、對可靠性要求不高的應(yīng)用環(huán)境。這與現(xiàn)在 流行 的手機短信非常相似 : 你在發(fā)短信的時候,只需要輸入對方手機號就 OK 了 ,至于對方能否收到,這就不是我們的事情了,一切都交給網(wǎng)絡(luò)處理。 以下是三次 “ 握手 ” 的概念圖 21: 主 機 A 主 機 B第 一 次 握 手 , 主 機 A