Java学习--简易聊天室
通过一周的学习和努力,做完了学习Java以来的第一个小项目–简易聊天室。
蒟蒻的我完成了小项目
基本功能:
私聊,群聊,文件的上传与下载。
首先,系统分为两大部分,第一部分是客户端,是用户使用的部分,第二部分就是服务器,所有的客户端都是通过访问服务器来进行聊天和文件传输的。客户端提供主要的界面及服务请求。核心的业务逻辑处理主要由服务器提供,并向客户端发送请求的结果。
相关功能:
1.在线用户的群聊
2.通过@XXX: 加 文本内容 的形式,简单的实现私聊功能
3.实时的更新当前在线的用户列表
4.文件向服务器端传输(上传)
5.文件从服务器端获取(下载)
当然,这个聊天室,还只是用作复习巩固Java SE所学内容的,仅仅作为学习Java的过程。区别于web聊天室,虽然实现了服务端和客户端分离,采用了网络传输,但也还停留在服务器和客户端在一台机器上的时代。
贴个图吧:
第一天:刚接手项目,啥也没想,开始爆肝。爆肝一天,我整个人都懵了,思路紊乱,写了一个Client类,我发现,啥都不明白。就这样,在迷茫和怀疑人生中度过了第一天
第二天:受到前一天的启(cui)发(can),我开始着手学习和梳理整个项目的实现思路,开始学习书上的例子和学长的实现思路。
----我认为,这是我整个项目的转折点,最为关键的一天
第三天:通过前一天的梳理思路,开始有了自己的想法,着手开始正式写项目。完成了服务器端的私聊群聊的逻辑设计,完成了客户端的界面的UI设计。
第四天:完成了客户端的群聊和私聊的发送,同时,完成群聊功能和服务器的连接,完善群聊功能服务器的响应。
第五天:完成服务器对客户端私聊的访问响应,完成群聊私聊。并开始着手文件上传和下载。
第六天:完善上传和下载,修改部分bug,项目基本完成。
1.极其重要的一点,一定要先把每个功能怎么实现研究清楚,再写项目。一定要先做大量的构思。 —重中之重
2.通过学习书上的例子,我获得了设计思路,服务器通过一个Map集合来存储 客户端(用户名)和对应输出流(实现功能的关键)。群聊实现则是遍历输出流,给每个流中写入字符串。私聊则是通过指定用户名找到对应的输出流,给对应的输出流中写入字符串。
3.文件传输的过程中,产生了诸多问题,首先在原有的tcp传输中,仿照书上的例子,采用了缓冲流BufferedReader的readline()方法接收数据,而此项目统一采用协议字符(特殊字符)作为标识符,来识别信息的类型。因此,使用缓存字符来进行文件传输,要想换掉BufferedReader,确实8太现实。权衡之下,我采用了UDP传输文件,并对文件的大小进行了限制。
4.用户列表的实时更新,采用的列表框,用着用着发现,列表框无法动态的实现增删。因此通过面向百度编程,了解到,采用Model作为参数构造列表框,动态操做Model即可完成对列表框的更新。所以,几乎在整个客户端,UI界面的列表框和Model作为参数构造其他类,目的就是实现动态的列表框。