項目源碼
https://github.com/zhuozhuotao/chatroom
一、前言
聊天室的項目之前就已經做過,但是當時只可在控制檯進行操作。最近閒着沒事,邊學邊做完成了一份帶界面的聊天室項目,做完後很開心,所以我給項目起名爲樂聊,哈哈哈哈。
項目大的來說由客戶端和服務端倆部分組成。
客戶端:可以進行註冊、登錄、私聊、創建羣、羣聊操作,註冊、登錄成功後都會彈出相應的提示框。並且如果有新用戶上線就會提醒其他在線用戶該用戶上線了,用戶上線後,可以在用戶列表中看到在線好友。用戶可以選擇一個在線好友進行私聊,或者創建羣進行羣聊,這裏有一個細節就是隻有創建羣的用戶可以在自己的羣列表看到創建的羣,其他羣用戶只有當第一次收到羣消息時纔會將羣名顯示在羣列表中,這個細節仿照了微信創建討論組(我纔不會告訴你我想偷懶這個事實)。
對於服務端:服務端監聽客戶端的連接,用戶登錄時必須使用已經註冊的用戶名和密碼。在服務端會顯示當前的端口、IP、登錄信息、在線人數,此外還會顯示出聊天內容哈~就一個輸出語句而已,是不是感覺很好怕?並且在用戶登錄的時候會實時刷新用戶列表。
項目技術
- Mysql數據庫
- 線程池
- 集合框架
- Socket編程
- swing組件
- 谷歌提供的json
二、功能分析
主要實現了註冊、登錄、加載用戶列表、羣聊、私聊的功能。
三、 功能模塊
四、實現
客戶端與服務端交互的通信格式:
@Data
public class MessageVo {
/**
* type:告知服務器要進行的動作。1:用戶登錄。2:私聊。3:創建羣聊。4:羣聊
* content:發送到服務器的具體內容
* to:告知服務器要將信息發給那個用戶。
*/
private String type;
private String content;
private String to;
}
1.客戶端
1.1實體類User
將數據庫表的四個字段(id、userName、password、brief)封裝爲User類。
1.2完成Dao層–數據庫操作
BasedDao:主要完成JDBC的加載數據源,連接數據庫,關閉資源這三個功能。
AccountDao:繼承BasedDao類,完成JDBC第三步:執行sql語句。分別使用MySQL的insert和select來進行用戶註冊和登錄。用戶註冊即提交數據到服務器,成功返回true,失敗返回false。用戶登錄即查找數據庫,成功返回User對象。
1.3業務層–sercice
(1)用戶註冊
在登錄頁面點擊註冊按鈕,提取輸入框數據持久化到數據庫
具體實現:
- 在輸入框獲取用戶的註冊信息。
- 將獲取到的輸入信息封裝爲User類。
- 調用AccountDao類的註冊方法將用戶持久化到數據庫。
(2)建立與服務器的連接
客戶端創建Socket套接字,Socket 類的構造函數試圖將客戶端連接到指定的服務器和端⼝號。如果通信被建⽴,則在客戶端創建⼀個 Socket 對象能夠與服務器進⾏通信。
使用InputStream讀取服務器發來的信息,使用OutputStream給服務器發送消息。
·
(2)用戶登錄
- 點擊登錄按鈕。
- 檢驗用戶輸入的登錄信息。
- 登錄成功則發送提示信息並與服務器建立連接,將當前用戶的用戶名發送到服務端,讀取服務端發回的所有在線用戶信息,然後加載用戶列表界面。
- 登錄失敗則停留在當前頁面並提示用戶信息錯誤。
(3)加載用戶列表***
- 登錄成功後動態加載用戶列表。
- 創建羣聊後動態加載羣列表。
- 定義後臺線程不斷監聽服務器發來的信息,包括:好友上線信息,用戶私聊、羣聊。
- 創建私聊、羣聊的label點擊事件。
(5)私聊
public PrivateChatGUI(String friendName,
String myName,
Connect2Server connect2Server)
向輸入框輸入聊天內容,當監聽到用戶按下回車鍵後,會將信息發給服務端,將自己發送的信息展示到當前私聊頁面。
(6)羣聊
當用戶點擊“創組按鈕後”,進入創建羣組頁面,選擇在線好友,點擊提交按鈕將信息提交給服務端,刷新好友列表界面的羣列表。
public GroupChatGUI(String groupName,
Set<String> friends,
String myName,
Connect2Server connect2Server)
由創建羣聊的人點擊羣名標籤,彈出羣聊頁面即可進行羣聊。
具體實現:
1.創建羣聊界面,界面由用戶輸入框、聊天信息框以及羣好友列表組成。
2.加載羣中的好友列表。
3.捕捉鍵盤的輸入,當用戶按下enter建後,將羣聊信息發送給服務器去處理。
2.服務端
1.創建ServerSocket基站,循壞等待客戶端連接。
2.將客戶端連接放入線程池去處理。
3.檢測到客戶端連接後創建一個Socket去處理用戶請求。
4.接受到客戶端發來的信息後,對信息進行反序列化處理。
5.根據反序列後收到的對象屬性進行相應的處理。
五、運行
1.先啓動服務端
2.啓動客戶端
3.點擊註冊按鈕
3.1註冊成功彈出提示框
一共註冊了三個人
3.輸入框輸入已註冊的用戶名和密碼,輸入正確登錄成功,輸入錯誤彈出提示框。
4.點擊登錄成功的確認按鈕進入用戶列表界面
4.1新用戶上線會給當前所有用戶發上線提示,點擊確認按鈕後加載用戶列表:
4.2點擊好友標籤進入私聊界面
輸入信息發送回車,
4.3點擊創建羣組:
創建好後,只有當前用戶羣列表會顯示羣名稱,其他用戶只有當收到羣聊消息時纔會顯示。
進行羣聊:
這次羣聊選擇了倆個列表好友創建羣聊,當然如果創建了一個也會只有羣內的哪一個用戶顯示羣聊界面。
六、對項目的測試
作爲一名喜歡測試行業的小姐姐,我在完成項目過程中不斷思考測試點並將他們逐一記錄,並在完成項目之後作了一份測試用例,笑納~
七、展望
- 發送文件、圖片。
- 點擊羣好友列表中的好友進入私聊頁面。
- 收到上線、新消息後聲音提醒。
- 用戶註銷。
- 用戶密碼修改。