Java团队课程设计-socket聊天室(Day4总结篇)

团队名称:

ChatRoom

项目git地址:

git提交记录(仅截取部分):

java聊天室实现原理 java实现聊天室实验报告_客户端

java聊天室实现原理 java实现聊天室实验报告_java仿聊天室项目总结_02

面向对象设计包图、类图

包图

java聊天室实现原理 java实现聊天室实验报告_java聊天室实现原理_03

UML类图

java聊天室实现原理 java实现聊天室实验报告_java聊天室实现原理_04

总结:

首先总结一下这几天遇到的问题和解决方案

使用ObjectInputStream/ObjectOutputStream的时候不能直接进行传递,需要将传递的类进行序列化,例如:

java聊天室实现原理 java实现聊天室实验报告_数据库_05

服务器对消息的转发,因为我们每一个客户端连接之后都有一个socket,所以转发只需要调用相对应的socket就能完成转发。

文件源路径问题,因为我们打算将项目打包成.exe文件,所以需要知道添加的资源的相对路径,使用getSource方法获取文件源,这个方法如果获取不到路径的话会直接报错,值得一提的是,你的文件路径编码格式应该与代码的编码格式一致,否则有可能获取不到路径而报错。

布局管理器无法控制组件大小,将布局管理器设置为null,直接用setBound方法根据x,y直接加入窗体。

重写鼠标方法能使画面更美观

java聊天室实现原理 java实现聊天室实验报告_文件名_06

数据库需要动态查找,但是preparedStatement.setString();不能设置表的名字,所以在百度很久没有找到结果的情况下,我们使用字符串拼接,使用StringBuffer来代替preparedStatement.setString()的设置

关于文件转发,首先因为使用的是socket,socket使用的是阻塞式传输,所以传输的文件大小不宜过大,否则socket被占用其他的聊天信息就不能传递,我们设置的9*1024的byte数组,这样保证在传输文件之后不用太久就能继续聊天。

关于文件保存,文件被服务器转发之后就要询问是否保存,但是保存需要保存的文件名和地址,地址我们使用通用地址,一般为C:\Users\Administrator\Desktop,保存到桌面,不过我们的测试代码是放在D盘的,因为没有权限放在那边,不知道是否是因为个人原因还是代码问题,文件名使用发送方的文件名

java聊天室实现原理 java实现聊天室实验报告_java聊天室实现原理_07

java聊天室实现原理 java实现聊天室实验报告_客户端_08

java聊天室实现原理 java实现聊天室实验报告_客户端_09

遇到但是还没有解决的问题

注册成功之后,需要将整个客户端程序关闭再开启,但是查找许久也没有找到问题,也排除了数据库没有更新的这种可能,最后因为时间不够了就将这个BUG留到以后来修复了。

同样,登录成功之后退出登录也需要将整个程序关闭重新开启。

在发送文件的时候不能继续传递消息,因为socket是阻塞式,所以解决不了这个问题,只能换netty。

想做但是还没完成的功能

我们是想做好友系统的,具体思路也有,就是在数据库创建一个关于userName的好友列表,这样客户端就只能与好友列表的人进行通讯,但是由于时间问题,想做的时候因为是倒数第二天了,就搁置了。

最开始我们是有一个大的聊天室,就是所有人都可以在里面说话,但是后来发现这个没什么技术含量而且还不如直接私聊来的更好,我们就把这个功能砍了,后来想的是能不能自定义的几个群聊,意思就是说客户端可以拉几个人开启群聊,不过需要GUI大改,也是因为来不及所以就没做了,如果下个学期JavaWeb还想做这个的话就把上面这些解决。

阿里巴巴代码扫描插件idea版

扫描之后得到的警告

java聊天室实现原理 java实现聊天室实验报告_数据库_10

被警告的代码

java聊天室实现原理 java实现聊天室实验报告_数据库_11

解决后的代码

java聊天室实现原理 java实现聊天室实验报告_java聊天室实现原理_12

解决之后0警告

java聊天室实现原理 java实现聊天室实验报告_客户端_13