TCP多人聊天室實現
1.1 分析
客戶端
功能:
1. 數據發送
2. 數據接收
技術:
1. socket
2. 輸入流和輸出流
3. 多線程,客戶端功能模塊有兩個線程
聊天:
1. 羣聊
2. 私聊
私聊前綴 @服務器用戶ID號:msg
服務器
功能:
1. 數據轉發
2. 用戶註冊
技術:
1. ServerSocket
2. 每一個用戶對應的Sokcet對象
3. 多線程同時在線
4. HashMap<Integer, 用戶>
數據轉發:
私聊前綴判斷
羣聊所有人發送
1.2 客戶端實現
數據發送:
使用輸出流發送數據給服務器
遵從Runnable接口
數據接收:
使用輸入流從服務器端接收數據
遵從Runnable接口
客戶端主方法:
用戶名提交
數據發送
數據接收
多線程啓動
1.3 資源關閉問題
代碼中操作了大量的輸入流和輸出流,這裏都需要進行關閉操作。
DataInputStream, DataOutputStream, BufferedReader, Socket
以上這些資源都是Closeable接口的實現類,都有對應的Close方法
封裝一個工具類:
提供一個closeAll方法,參數爲符合Closeable接口的實現類對象。
這裏可以考慮可變長參數
Closeable... closeable
可變長參數在方法中使用的過程裏面是對應一個數組,這裏完成可以使用增強for來使用
工具類名:
CloseUtil
public static void closeAll(Closeable... closeable)
1.4 功能拓展
1. 用戶退出
用戶輸入指定字段之後可以退出
客戶端Socket服務
服務端Socket服務
涉及資源關閉,線程關閉
2. 用戶異常退出
在運行過程中發現問題,需要及時處理,關閉對應的資源,終止對應的線程
3. 服務器保存所有的聊天記錄