乐聊----java界面聊天室
文章目錄
- 項(xiàng)目源碼
- 一、前言
- 項(xiàng)目技術(shù)
- 二、功能分析
- 三、 功能模塊
- 四、實(shí)現(xiàn)
- 客戶端與服務(wù)端交互的通信格式:
- 1.客戶端
- 2.服務(wù)端
- 五、運(yùn)行
- 六、對(duì)項(xiàng)目的測(cè)試
- 七、展望
項(xiàng)目源碼
https://github.com/zhuozhuotao/chatroom
一、前言
聊天室的項(xiàng)目之前就已經(jīng)做過,但是當(dāng)時(shí)只可在控制臺(tái)進(jìn)行操作。最近閑著沒事,邊學(xué)邊做完成了一份帶界面的聊天室項(xiàng)目,做完后很開心,所以我給項(xiàng)目起名為樂聊,哈哈哈哈。
項(xiàng)目大的來說由客戶端和服務(wù)端倆部分組成。
客戶端:可以進(jìn)行注冊(cè)、登錄、私聊、創(chuàng)建群、群聊操作,注冊(cè)、登錄成功后都會(huì)彈出相應(yīng)的提示框。并且如果有新用戶上線就會(huì)提醒其他在線用戶該用戶上線了,用戶上線后,可以在用戶列表中看到在線好友。用戶可以選擇一個(gè)在線好友進(jìn)行私聊,或者創(chuàng)建群進(jìn)行群聊,這里有一個(gè)細(xì)節(jié)就是只有創(chuàng)建群的用戶可以在自己的群列表看到創(chuàng)建的群,其他群用戶只有當(dāng)?shù)谝淮问盏饺合r(shí)才會(huì)將群名顯示在群列表中,這個(gè)細(xì)節(jié)仿照了微信創(chuàng)建討論組(我才不會(huì)告訴你我想偷懶這個(gè)事實(shí))。
對(duì)于服務(wù)端:服務(wù)端監(jiān)聽客戶端的連接,用戶登錄時(shí)必須使用已經(jīng)注冊(cè)的用戶名和密碼。在服務(wù)端會(huì)顯示當(dāng)前的端口、IP、登錄信息、在線人數(shù),此外還會(huì)顯示出聊天內(nèi)容哈~就一個(gè)輸出語句而已,是不是感覺很好怕?并且在用戶登錄的時(shí)候會(huì)實(shí)時(shí)刷新用戶列表。
項(xiàng)目技術(shù)
- Mysql數(shù)據(jù)庫
- 線程池
- 集合框架
- Socket編程
- swing組件
- 谷歌提供的json
二、功能分析
主要實(shí)現(xiàn)了注冊(cè)、登錄、加載用戶列表、群聊、私聊的功能。
三、 功能模塊
四、實(shí)現(xiàn)
客戶端與服務(wù)端交互的通信格式:
@Data public class MessageVo {/*** type:告知服務(wù)器要進(jìn)行的動(dòng)作。1:用戶登錄。2:私聊。3:創(chuàng)建群聊。4:群聊* content:發(fā)送到服務(wù)器的具體內(nèi)容* to:告知服務(wù)器要將信息發(fā)給那個(gè)用戶。*/private String type;private String content;private String to; }1.客戶端
1.1實(shí)體類User
將數(shù)據(jù)庫表的四個(gè)字段(id、userName、password、brief)封裝為User類。
1.2完成Dao層–數(shù)據(jù)庫操作
BasedDao:主要完成JDBC的加載數(shù)據(jù)源,連接數(shù)據(jù)庫,關(guān)閉資源這三個(gè)功能。
AccountDao:繼承BasedDao類,完成JDBC第三步:執(zhí)行sql語句。分別使用MySQL的insert和select來進(jìn)行用戶注冊(cè)和登錄。用戶注冊(cè)即提交數(shù)據(jù)到服務(wù)器,成功返回true,失敗返回false。用戶登錄即查找數(shù)據(jù)庫,成功返回User對(duì)象。
1.3業(yè)務(wù)層–sercice
(1)用戶注冊(cè)
在登錄頁面點(diǎn)擊注冊(cè)按鈕,提取輸入框數(shù)據(jù)持久化到數(shù)據(jù)庫
具體實(shí)現(xiàn):
- 在輸入框獲取用戶的注冊(cè)信息。
- 將獲取到的輸入信息封裝為User類。
- 調(diào)用AccountDao類的注冊(cè)方法將用戶持久化到數(shù)據(jù)庫。
(2)建立與服務(wù)器的連接
客戶端創(chuàng)建Socket套接字,Socket 類的構(gòu)造函數(shù)試圖將客戶端連接到指定的服務(wù)器和端?號(hào)。如果通信被建?,則在客戶端創(chuàng)建?個(gè) Socket 對(duì)象能夠與服務(wù)器進(jìn)?通信。
使用InputStream讀取服務(wù)器發(fā)來的信息,使用OutputStream給服務(wù)器發(fā)送消息。
·
(2)用戶登錄
- 點(diǎn)擊登錄按鈕。
- 檢驗(yàn)用戶輸入的登錄信息。
- 登錄成功則發(fā)送提示信息并與服務(wù)器建立連接,將當(dāng)前用戶的用戶名發(fā)送到服務(wù)端,讀取服務(wù)端發(fā)回的所有在線用戶信息,然后加載用戶列表界面。
- 登錄失敗則停留在當(dāng)前頁面并提示用戶信息錯(cuò)誤。
(3)加載用戶列表***
- 登錄成功后動(dòng)態(tài)加載用戶列表。
- 創(chuàng)建群聊后動(dòng)態(tài)加載群列表。
- 定義后臺(tái)線程不斷監(jiān)聽服務(wù)器發(fā)來的信息,包括:好友上線信息,用戶私聊、群聊。
- 創(chuàng)建私聊、群聊的label點(diǎn)擊事件。
(5)私聊
向輸入框輸入聊天內(nèi)容,當(dāng)監(jiān)聽到用戶按下回車鍵后,會(huì)將信息發(fā)給服務(wù)端,將自己發(fā)送的信息展示到當(dāng)前私聊頁面。
(6)群聊
當(dāng)用戶點(diǎn)擊“創(chuàng)組按鈕后”,進(jìn)入創(chuàng)建群組頁面,選擇在線好友,點(diǎn)擊提交按鈕將信息提交給服務(wù)端,刷新好友列表界面的群列表。
由創(chuàng)建群聊的人點(diǎn)擊群名標(biāo)簽,彈出群聊頁面即可進(jìn)行群聊。
具體實(shí)現(xiàn):
1.創(chuàng)建群聊界面,界面由用戶輸入框、聊天信息框以及群好友列表組成。
2.加載群中的好友列表。
3.捕捉鍵盤的輸入,當(dāng)用戶按下enter建后,將群聊信息發(fā)送給服務(wù)器去處理。
2.服務(wù)端
1.創(chuàng)建ServerSocket基站,循壞等待客戶端連接。
2.將客戶端連接放入線程池去處理。
3.檢測(cè)到客戶端連接后創(chuàng)建一個(gè)Socket去處理用戶請(qǐng)求。
4.接受到客戶端發(fā)來的信息后,對(duì)信息進(jìn)行反序列化處理。
5.根據(jù)反序列后收到的對(duì)象屬性進(jìn)行相應(yīng)的處理。
五、運(yùn)行
1.先啟動(dòng)服務(wù)端
2.啟動(dòng)客戶端
3.點(diǎn)擊注冊(cè)按鈕
3.1注冊(cè)成功彈出提示框
一共注冊(cè)了三個(gè)人
3.輸入框輸入已注冊(cè)的用戶名和密碼,輸入正確登錄成功,輸入錯(cuò)誤彈出提示框。
4.點(diǎn)擊登錄成功的確認(rèn)按鈕進(jìn)入用戶列表界面
4.1新用戶上線會(huì)給當(dāng)前所有用戶發(fā)上線提示,點(diǎn)擊確認(rèn)按鈕后加載用戶列表:
4.2點(diǎn)擊好友標(biāo)簽進(jìn)入私聊界面
輸入信息發(fā)送回車,
4.3點(diǎn)擊創(chuàng)建群組:
創(chuàng)建好后,只有當(dāng)前用戶群列表會(huì)顯示群名稱,其他用戶只有當(dāng)收到群聊消息時(shí)才會(huì)顯示。
進(jìn)行群聊:
這次群聊選擇了倆個(gè)列表好友創(chuàng)建群聊,當(dāng)然如果創(chuàng)建了一個(gè)也會(huì)只有群內(nèi)的哪一個(gè)用戶顯示群聊界面。
六、對(duì)項(xiàng)目的測(cè)試
作為一名喜歡測(cè)試行業(yè)的小姐姐,我在完成項(xiàng)目過程中不斷思考測(cè)試點(diǎn)并將他們逐一記錄,并在完成項(xiàng)目之后作了一份測(cè)試用例,笑納~
七、展望
- 發(fā)送文件、圖片。
- 點(diǎn)擊群好友列表中的好友進(jìn)入私聊頁面。
- 收到上線、新消息后聲音提醒。
- 用戶注銷。
- 用戶密碼修改。
總結(jié)
以上是生活随笔為你收集整理的乐聊----java界面聊天室的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [转载]Palm 串行通讯GPS数据读取
- 下一篇: Oracle免登录下载JDK(实测有效)