Java團隊課程設計-socket聊天室(Day4總結篇)
團隊名稱:
ChatRoom
項目git地址:
https://gitee.com/Wenwrangler/ChatRoom.git
git提交記錄(僅截取部分):


面向對象設計包圖、類圖
包圖

UML類圖

總結:
首先總結一下這幾天遇到的問題和解決方案
-
使用ObjectInputStream/ObjectOutputStream的時候不能直接進行傳遞,需要將傳遞的類進行序列化,例如:

-
服務器對消息的轉發,因為我們每一個客戶端連接之后都有一個socket,所以轉發只需要調用相對應的socket就能完成轉發。
-
文件源路徑問題,因為我們打算將項目打包成.exe文件,所以需要知道添加的資源的相對路徑,使用getSource方法獲取文件源,這個方法如果獲取不到路徑的話會直接報錯,值得一提的是,你的文件路徑編碼格式應該與代碼的編碼格式一致,否則有可能獲取不到路徑而報錯。
-
布局管理器無法控制組件大小,將布局管理器設置為null,直接用setBound方法根據x,y直接加入窗體。
-
重寫鼠標方法能使畫面更美觀

-
數據庫需要動態查找,但是preparedStatement.setString();不能設置表的名字,所以在百度很久沒有找到結果的情況下,我們使用字符串拼接,使用StringBuffer來代替preparedStatement.setString()的設置
-
關於文件轉發,首先因為使用的是socket,socket使用的是阻塞式傳輸,所以傳輸的文件大小不宜過大,否則socket被占用其他的聊天信息就不能傳遞,我們設置的9*1024的byte數組,這樣保證在傳輸文件之后不用太久就能繼續聊天。
-
關於文件保存,文件被服務器轉發之后就要詢問是否保存,但是保存需要保存的文件名和地址,地址我們使用通用地址,一般為C:\Users\Administrator\Desktop,保存到桌面,不過我們的測試代碼是放在D盤的,因為沒有權限放在那邊,不知道是否是因為個人原因還是代碼問題,文件名使用發送方的文件名



遇到但是還沒有解決的問題
- 注冊成功之后,需要將整個客戶端程序關閉再開啟,但是查找許久也沒有找到問題,也排除了數據庫沒有更新的這種可能,最后因為時間不夠了就將這個BUG留到以后來修復了。
- 同樣,登錄成功之后退出登錄也需要將整個程序關閉重新開啟。
- 在發送文件的時候不能繼續傳遞消息,因為socket是阻塞式,所以解決不了這個問題,只能換netty。
想做但是還沒完成的功能
- 我們是想做好友系統的,具體思路也有,就是在數據庫創建一個關於userName的好友列表,這樣客戶端就只能與好友列表的人進行通訊,但是由於時間問題,想做的時候因為是倒數第二天了,就擱置了。
- 最開始我們是有一個大的聊天室,就是所有人都可以在里面說話,但是后來發現這個沒什么技術含量而且還不如直接私聊來的更好,我們就把這個功能砍了,后來想的是能不能自定義的幾個群聊,意思就是說客戶端可以拉幾個人開啟群聊,不過需要GUI大改,也是因為來不及所以就沒做了,如果下個學期JavaWeb還想做這個的話就把上面這些解決。
阿里巴巴代碼掃描插件idea版
掃描之后得到的警告

被警告的代碼

解決后的代碼

解決之后0警告

最后附上我們前三篇的鏈接
Java團隊課程設計-socket聊天室(Day1)
還有我們組每個人的個人總結博客
Java課程設計--個人總結--溫海傑--組長
用Java Swing實現QQ聊天界面--陳星星--組員
Java團隊課程設計-socket聊天室(個人總結)--黃泓彬--組員
