999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于Java語言的即時通訊系統設計與實現

2022-05-30 10:48:04杜瑞慶李一諾
電腦知識與技術 2022年31期

杜瑞慶 李一諾

摘要:即時通訊系統在日常工作與生活中有著不可或缺的作用。文中對當下即時通訊軟件的現狀與痛點進行了分析,并基于此設計一款輕量化的即時通訊系統。文章使用Java語言,基于C/S架構來探究并進行系統開發,用巧妙的方法使系統突破了局域網的限制,通過系統的客戶端、服務端、數據庫對其設計進行了介紹,并詳細闡述了系統的功能和實現步驟。

關鍵詞:即時通訊系統;Socket;Java;文件發送;多線程;C/S

中圖分類號:TP311 ? ? ?文獻標識碼:A

文章編號:1009-3044(2022)31-0029-04

1 引言

QQ、微信等即時通訊應用,早已成為了人們生活中不可或缺的部分。但歷經幾年的開發,其內容由于更新趨于臃腫,存儲空間耗費也隨著增加,且數據傳遞的穩定性也未能獲得顯著的提高,因而該類應用對于要求精簡和安全的用戶并不合適。

論文使用Java語言實現一款輕量化的即時通訊系統。其在保證用戶基本操作的基礎上,摒棄了當今即時通訊軟件大部分過于臃腫的功能。信息在傳輸過程中會被全程加密,保證用戶在溝通時的信息安全。并且基于Java語言健壯、安全、跨平臺的特性,用戶可以在任意操作系統上運行此系統的同時,防范各種攻擊[1]。這些都對用戶協同效率的提升有著重要的作用。

2 系統需求

設計一個即時通訊軟件系統,要求每個用戶有獨立的客戶端。

1) 客戶端需要登錄才可以進入,并帶有注冊頁面。登錄和注冊頁面需帶有判斷輸入合法性的功能。

2) 用戶可以通過客戶端發送文本,上傳文件。且接收者會實時收到消息。

3)用戶可以查看消息記錄,并可以下載消息記錄中的文件。

3 系統設計

3.1 系統架構

程序為 C/S 架構。客戶端負責信息的顯示、與服務端進行消息的收發操作。服務端負責信息的收集、存儲、處理、發送。

3.2 客戶端設計

1) 登錄與注冊:系統可以判斷輸入是否為空、輸入是否合法。對于登錄功能,系統還可以判斷賬號是否存在、密碼是否正確;對于注冊功能,系統還可以判斷賬號或用戶名是否重復、兩次密碼是否一致。任何錯誤導致無法登錄或注冊,系統都會清空一些已經輸入的信息。

2) 消息發送:用戶可以將文本寫入到輸入框中,點擊“發送”按鈕發送。也可以通過“選擇文件”按鈕發送文件。

3) 安全傳輸:信息在發送前會經過特殊加密,直至目標客戶端收到才會被解密。

4) 消息接收:客戶端的后臺可以實時接收由服務器發送的其他用戶的消息。

5) 消息顯示:客戶端可以在聊天框中實時顯示用戶本機發送的消息與其他用戶的消息。

6) 消息記錄查看:用戶可以查看到歷史的消息,即使此用戶之前為離線狀態。

7) 文件下載:如果消息是文件類型,用戶可以將其下載到本機的任何位置。

3.3 服務端設計

1) 登錄與注冊:可以判斷登錄與注冊中涉及數據庫的操作。如賬號是否存在,密碼是否錯誤,用戶名是否已經存在等。

2) 消息接收:實時接收任何客戶端發送的消息,并存儲到數據庫中。若此消息是文件,系統還會將文件儲存到服務器端,以供以后的下載操作。

3) 消息發送:處理收到的消息后,將消息轉發到所有其他的客戶端。

3.4 數據庫設計

1) 數據庫的概念結構設計

數據庫的概念結構設計 ER 圖如圖1所示。

數據庫的設計滿足第三范式[2]。聊天平臺中可以有多個用戶,多條消息。每個用戶可以發送多條消息,一條消息只可以來自于一個用戶。

2) 數據庫的邏輯結構設計

用戶(用戶編號,賬號,用戶名,密碼,地址,是否在線)。

消息(消息編號,消息內容,消息類型,消息發送者id,消息接收者id,消息發送時間,文件路徑)。

3) 數據庫的表結構設計

3.5 通訊模型

1) 登錄與注冊

在對用戶輸入的合法性進行檢測后,客戶端會將注冊或登錄信息封裝為HTTP請求并發送至服務器端,服務器端會調用數據庫進一步檢查數據的合法性。若數據合法,服務器會將數據存儲至數據庫,并將代表成功的響應發送回客戶端。反之將代表失敗的響應發送回客戶端。客戶端根據響應的成功與否決定跳轉至下一步或者提醒用戶重新輸入。

2) 消息發送

服務器端在啟動的同時會在特定端口創建一個ServerSocket來接收來自客戶端的承載著消息的Socket。用戶按下發送按鈕后,消息類型、消息內容、發送時間、發送者和接收者等信息會被封裝并通過Socket發送至服務器。當收到Socket消息后,服務器對不同類型的消息會做出不同的操作。若消息不包含文件,服務器會將消息內容等信息存入數據庫。若消息包含文件,由于文件的內容過大無法存入數據庫,服務器會將文件通過IO流存儲到服務器本地的磁盤,由文件的存儲路徑代替文件的內容存入數據庫。之后如果有客戶端想獲取文件,服務器可以通過數據庫中的文件路徑找到文件。

3) 消息接收

Socket可以實現不同主機之間的數據傳輸,但這種數據傳輸一般只會在同一個域中發生。各種進程使用這個相同的域互相之間用Internet協議簇來進行通信[3]。用戶發送消息后需要服務器通知接收方,但由于客戶端一般與服務器處于不同域,若使用Socket,服務器想要訪問到客戶端難度非常大。比較理想的解決方案是客戶端主動向處于公網的服務器端請求,以查詢是否有用戶向自己發送了消息。解決方案可以根據服務端響應的時機不同分為兩種:

①短輪詢:客戶端每隔一秒向服務器端請求一次。無論是否有消息,服務端都會做出響應。客戶端根據相應的內容判斷是否有新消息。

②長輪詢:客戶端向服務器請求,服務端會將請求掛起,直至有新消息才會響應。客戶端不需要判斷是否有新消息。服務端響應后,客戶端會立即再發送一次請求。

如果查詢到有用戶向自己發送了新消息,客戶端則根據消息類型的不同將消息打印至客戶端。由于請求過程需要線程掛起等待,故客戶端會專為消息的接收開辟一個新的線程。

4) 文件下載

文件下載請求的通訊模型較為簡單。由客戶端向服務端發送指定文件的下載請求,服務端收到請求后,會根據指定文件在數據庫存儲的文件路徑找到本地的文件,并將文件轉化為二進制流響應給客戶端。客戶端收到后會將二進制流轉化為文件存儲到用戶指定的位置。

4 系統實現

4.1 登錄與注冊判斷

登錄與注冊判斷會分兩步,第一步是由本地客戶端判斷的格式錯誤(輸入為空、輸入不合法)和服務器需要調用數據庫判斷的錯誤(登錄時賬號不存在、注冊時用戶名重復等)。只有這兩步都未出現錯誤,登錄才可以成功。

在用戶點擊登錄或注冊按鈕時,客戶端會掃描所有輸入框體的內容,如果發現空值,則向用戶提示錯誤。如果輸入不為空,則繼續判斷輸入是否合法。如賬號密碼只能由字母與數字組成,若輸入不符合這一規定,則向用戶提示錯誤。如果未發現格式錯誤,系統會使用Http請求將用戶輸入的信息發送至服務器繼續判斷。

服務器收到用戶輸入的信息后會結合數據庫進行判斷,并將成功與否返回至客戶端。

4.2 信息的發送與接收

客戶端向服務器發送數據時會根據信息類型的不同對信息做不同的封裝。服務器端會收集到客戶端的四種消息,格式為字符串,表示如下:

文本消息:text&發送者id&發送時間&接收者id&消息內容

文件消息:file&發送者id&發送時間&接收者id&文件名稱&文件二進制編碼

下載請求:download&此文件的發送者&發送時間&請求者id

歷史記錄請求:history&請求者id&目標用戶id

服務端收到消息后會根據第一個“&”前的類型對消息做出不同的處理。

1) 文本消息

服務端通過類型text判斷消息類型為文本。文本消息首先會被打印到發送者的客戶端中,然后才會被發送至服務端。服務端處理完畢之后,會將信息存入到數據庫,之后若接收者的客戶端請求消息,服務端會從數據庫中查詢出消息并打包發送。客戶端收到消息后會將其打印至客戶端。

2) 文件消息

服務端通過類型file判斷消息類型為文件。文件消息首先會被打印到發送者到客戶端中。文件消息中包含文件名稱和文件的二進制編碼,服務端會在本地使用 IO 流創建文件并將文件的二進制編碼輸入實現文件的上傳,最后將文件路徑存儲到數據庫以便之后的下載操作。存儲過后服務端同樣會在接收者客戶端請求時將消息打包發送。

3) 下載請求

用戶點擊文件消息中到“下載按鈕”時,客戶端會讓用戶選擇文件保存路徑。 選擇完畢后,客戶端會向服務器端發送download開頭的下載請求。服務端會根據請求中包含的發送者的用戶id和發送時間在數據庫中查詢出相應文件在服務器端的路徑。找到后會將文件名和二進制編碼發送給客戶端,客戶端收到數據后會使用 IO 流將文件保存到用戶所選的路徑中。

4) 消息記錄查看

用戶點擊“歷史記錄”按鈕時,會向服務器發送history開頭的歷史記錄請求。服務端會查詢數據庫,將請求者和目標用戶之間的消息全部發送。客戶端處理消息后,打印至客戶端的消息記錄面板。

4.3 信息加密

在客戶端和服務端的通訊過程中,凡是消息內容,客戶端都會對其加密,直至傳送到另一個客戶端才會對消息進行解密并顯示。系統的加密算法是基于Base64編碼并融合字符串隨機偏移形成的全新算法,此算法可以保證用戶的數據不會泄露。

1) Base64編碼

Socket有一個致命的缺陷,其不能傳輸漢字。想要實現漢字的傳輸,就要將字符串重新編碼。Base64是現今最常用的編碼方式之一,它可以將人們發送的信息進行特殊計算,生成一句由64個常見字符組成的字符串[4]。使用Base64編碼的目的是讓內容可以通過Socket在各個網關之間進行無錯傳輸。Base64是可以編碼并解碼的,正因如此,它的作用主要在于數據的傳輸,而不是安全性。若想實現加密,需要配合字符串的變化。

2) 加密算法

Base64解碼器可以解密任何以Base64加密過的字符串。但如果此字符串發生了任何微小的改變,解密結果就會大相徑庭。利用此性質,客戶端會對原信息進行1000次Base64加密。每兩次加密之間,客戶端會將字符串從中間進行分割,然后將兩個字符串反轉后拼接,得到一個新的字符串供下一次加密。接收者的客戶端收到加密后的消息后,只需根據此算法進行1000次Base64解密便可得到消息。在未知此加密算法的情況下,暴力破解無法得到正確的結果。

5 系統測試

即時通訊系統在開發完成后,需進行系統測試,測試需要從需求符合度、功能正確性、性能指標、運行穩定性、互聯互通、可用性、可維護性、兼容性等多個維度對本系統進行整體測試,并得出測試結果[5]。

系統測試過程及結果。此系統使用Java語言,由idea工具編寫并對各個功能測試。1) 客戶端可以完成用戶的注冊和登錄。客戶端可以判斷輸入格式的正確性,服務器端可以判斷輸入的合法性;若出現注冊或登錄失敗,客戶端會生成彈窗提醒用戶。2) 用戶可以發送文本消息與文件消息,在一秒鐘之內目標用戶可以接收到此消息。3) 用戶可以下載收到的文件消息中附帶的文件,下載之后文件是完整無缺的。4) 用戶可以查看自己與任一用戶的聊天歷史。

6 結束語

本系統對當今即時通訊軟件做了極致的精簡,保留了用戶最基本的功能。并且系統突破了局域網和系統的限制,使用戶可以隨時隨地進行安全的信息交流和文件傳送。后期會將客戶端輪詢的信息請求方式升級為客戶端監聽,這樣就會大大減少服務端的負載,使其可以承擔更多用戶的信息交流。

參考文獻:

[1] Cay S.Horstmann.Java核心技術·卷 I(原書第10版)[M].周立新,譯.北京:機械工業出版社,2016.

[2] Forta B.MySQL必知必會[M].劉曉霞,鐘鳴,譯.北京:人民郵電出版社,2009.

[3] 劉惠欣,孟令一.C語言從入門到精通:全新精華版[M].北京:北京希望電子出版社,2017.

[4] 石春宏.基于base64編碼實現信息隱寫分析[J].信息與電腦(理論版),2020,32(1):118-119.

[5] 張烜,秦慶鵬.基于Java編程語言的內網即時通訊插件系統設計與實現[J].中國新通信,2020,22(13):38-39.

【通聯編輯:謝媛媛】

收稿日期:2022-05-15

作者簡介:杜瑞慶(1974—) ,男,河北贊皇人,副教授,博士,主要研究方向為計算機應用、數據庫應用等;李一諾(2002—) ,男,山東濟南人,通信作者,本科在讀,研究方向為專業軟件工程。

主站蜘蛛池模板: 久久久久久久久18禁秘| 国产69精品久久久久妇女| 國產尤物AV尤物在線觀看| 成人韩免费网站| www.日韩三级| 永久毛片在线播| 久久精品无码一区二区日韩免费| 欧美成人免费一区在线播放| 亚洲精品福利视频| 久久亚洲美女精品国产精品| 亚洲天堂视频在线观看免费| 国产精品天干天干在线观看| 久久婷婷五月综合色一区二区| 国产手机在线ΑⅤ片无码观看| JIZZ亚洲国产| 国产精欧美一区二区三区| 亚洲资源站av无码网址| 麻豆AV网站免费进入| 亚洲精品自拍区在线观看| 国产91视频观看| 99热最新网址| 国产大片黄在线观看| 在线观看国产小视频| 成人久久精品一区二区三区| 免费网站成人亚洲| 国产专区综合另类日韩一区 | 91无码网站| www.亚洲国产| 九九九久久国产精品| 亚洲一级毛片在线观| 亚洲天堂网在线播放| 亚洲国产成人自拍| 国产亚洲精久久久久久久91| 国产欧美日韩视频一区二区三区| 最新国产精品第1页| 国产精品香蕉| 亚洲第一成网站| 成人日韩视频| 国产va在线观看免费| 成年人久久黄色网站| 亚洲视频三级| 97在线国产视频| 免费啪啪网址| 国产99精品视频| 人妻中文久热无码丝袜| av一区二区三区高清久久| 久久久久夜色精品波多野结衣| 亚洲国产成人超福利久久精品| 欧美在线一级片| 亚洲区一区| 免费在线不卡视频| 色AV色 综合网站| 免费不卡视频| 国产精品视频3p| 伊人久久青草青青综合| 亚洲视频无码| 国产精品永久免费嫩草研究院| 久久人体视频| 亚洲一级毛片在线观播放| 久久五月天国产自| 亚洲激情区| 爱爱影院18禁免费| 日韩成人在线视频| 伊人精品视频免费在线| 久久免费看片| 国产亚洲视频免费播放| 亚洲成人精品久久| 丁香六月综合网| 99久久精品国产综合婷婷| 欧美天堂久久| 亚洲精品久综合蜜| 丁香婷婷综合激情| 玖玖精品在线| 欧美日韩激情| 一级黄色欧美| 國產尤物AV尤物在線觀看| 久久精品只有这里有| 国产精品第页| 久久黄色免费电影| 欧美日韩国产精品va| 欧美福利在线| 亚洲日本中文字幕乱码中文 |