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作为参数构造其他类,目的就是实现动态的列表框。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值