f(x)聊天室项目总结

今天,我们的F(x)聊天室1.0版本终于出炉了。虽然花费的时间远远超出预期,最终结果也有点牵强(界面粗糙、功能简单),但是还是挺激动的。

一、 项目简介
1、 项目名称:
F(x)聊天室
2、 项目成员及分工:
服务器(XM)
客户端(本人)
3、 通信协议:
XMPP协议
4、 项目时间:
2011年8月6日—2011年10月7日

二、 主要功能
1、 注册(通过用户名和密码注册,用户名不可以重复)
2、 登陆(通过号码和密码进行登录)
3、 好友列表(用户成功登陆后接收服务器发来的好友列表,并显示)
4、 查找、添加好友(通过号码进行查找,ps:只有好友在线才能查找成功)
5、 聊天(好友之间可进行聊天)
6、 发送文件
7、 提示好友上下线(只提示好友的,不提示自己的上下线)

三、 实现难点(ps:仅限于我写的客户端)
1、 项目类图的设计:
这样一个通信项目,究竟需要多少类组成,每个类都承担什么功能,其实最初还是很难预料的,一片迷茫。随着设计模式和代码质量的学习,思路渐渐清晰。如果把类分类的话,一共有三种包:
消息包:是所有消息的定义类
工具包:存放程序需要使用的类和函数,如消息打包、解包的类 ,输出日志消息的类,还有解析消息、读取字符串的 函数组装的类等等
界面包:主要的项目的界面显示类及与服务器连接的类
运用“事件监听”模型,使通信和界面分开,降低代码的耦合度
2、 好友列表
其实注册、登陆消息都还好,客户端与服务器连接的时候很容易就连通了,就是好友列表,有点纠结。
一开始定义的是:用户登录后服务器不给用户发送好友列表,所以最初登录时用户树的子节点是空的,只有添加好友成功后服务器才会给双方发送好友列表消息。由于服务器的问题,只能给一个用户发送好友列表,给另一个发送时总是出现空指针异常,导致项目卡在这里很长时间。我调试的时候,大多数情况下只收到一条好友列表消息,但偶尔又能正确收到两条好友列表消息,这种若隐若现的bug真让人头疼。最后发现,用户信息保存在一个map中,之前添加好友时用的迭代器遍历整个map,就是最后这iterator.remove();出现的问题,把这行注释掉之后好友列表就能正常显示了。我也不确定究竟是不是这里的问题,之前少数几次好友列表的正常显示也让我百思不得其解。后来将好友列表消息小小修改了一下,就是用户登录时服务器就发送好友列表

//得到在线用户的迭代器
Set<UserInfo> set = getUsMap().keySet();
Iterator<UserInfo> iterator = set.iterator();
//向接受者(此接收者必须要在线)发送消息
while(iterator.hasNext()){
UserInfo userInfo = iterator.next() ;
if(recNumber == userInfo.getNumber()){
ServerThread st = getUsMap().get(userInfo);
st.sendMsg(msg);
break;
}
// iterator.remove();
}
3、 传文件
其实,文件的传送也是这个项目中比较失败的地方,惭愧!一开始文件内容定义的是String类型,测试的时候用txt测试,很简单就通过了,但是传图片的时候就会出现乱码。我又把文件内容改成byte[]类型的,可是传文本文件的时候都是乱码,其实也不算是乱码,是类似于[B@de6ced的东西。整个流程就是:发送的是xml+byte[]类型的消息,本质上还是String字符串,读取的时候将文件内容解析成String,再转换成byte[],就是乱码了。这个流程有问题,想想也真是自找麻烦,可能是String与byte[]数组转换的问题,也可能是读取消息是解析的问题。所以总的来说,这个文件传送很失败。这时才感觉当初选择XMPP协议真的是不太明智,其实并不是XMPP协议的问题,而是自己解析消息的方法有很大局限性,希望以后能有所改进。
4、 界面的设计(给Jpanel添加背景图片)
以前界面的设计都是Jframe有还几个Jpanel组成,有的Jpanel专门贴图片(贴图的方法是用JTextArea),有的专门放置按钮等组件,但是这样一来界面就显得分离,按钮面板的背景只能用Jpanel的setBackground()来设置,但是只是几种单调的颜色,很难满足。后来上网查了很多资料,为Jpanel设置背景图片,最后还是继承Jpanel类并重写了paintComponent()方法才行。思路本不难,但是一劳永逸啊,以后往界面上贴图片就不愁了。


四、 有待改进的地方
服务器:
1、 现在服务器的用户信息保存在文件中,导致每次重启服务器后用户都要重新注册,以后升级的话打算连接上数据库,永久保存用户信息。
2、 服务器查找用户的效率问题
3、 消息转发的优化
……
客户端
1、 文件发送的优化(可能要改通信协议或解析的方法)
2、 表情的发送
3、 远程控制的实现
4、 删除好友功能的实现
5、 还有很多设计不人性化……

五、 项目小结
项目的最终结果虽然有点不尽人意,但是在做项目的过程中收获颇丰,在写客户端的代码期间没太大感觉,可是真正与服务器连接调试的时候,发现自己又出现了一种新的状态,很好的状态:一个人不断的连接调试,出现问题、找问题、解决问题,写程序真的是种体力活,但是自己越来越能沉浸到程序中去了,出现问题也不再像以前那样茫然无措,而是分析出问题的各种原因,并解决问题,实在无能为力就百度。也就是能沉下心去做一件事了,曾经连着几天空闲时间都沉浸在项目中,一扫暑假集训的不好状态,很充实,虽然现在可能没有那种拼劲儿了,但是努力过,就能坦然面对结果。

下面贴几张图片吧:
[img]http://dl.iteye.com/upload/picture/pic/100201/4343f842-c100-344b-8340-cfe7e3e53eb8.png[/img]
[img]http://dl.iteye.com/upload/picture/pic/100203/d990be6f-4d81-311a-b21d-f57892166999.png[/img]
[img]http://dl.iteye.com/upload/picture/pic/100205/95cbb19f-d65c-3e0e-917e-a692ab5f0189.png[/img]
[img]http://dl.iteye.com/upload/picture/pic/100207/867360a8-c72c-34fc-9dcc-97757b1572f1.png[/img]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JavaWeb聊天室项目是基于JavaWeb技术开发的在线聊天系统。它允许用户通过浏览器或客户端应用程序进行实时的文字、图片、文件等多媒体信息的交流和分享。 该项目的主要功能包括用户注册登录、创建聊天室、加入聊天室、发送消息、接收消息等。下面是该项目的一般实现步骤: 1. 环境搭建:安装Java开发环境(如JDK)、Web服务器(如Tomcat)、数据库(如MySQL)等。 2. 创建数据库:设计并创建数据库表,包括用户表、聊天室表、消息表等。 3. 用户注册登录:实现用户注册和登录功能,包括用户信息的验证和存储。 4. 创建聊天室:用户可以创建自己的聊天室,并设置聊天室的名称、密码等。 5. 加入聊天室:用户可以通过输入聊天室名称和密码来加入已存在的聊天室。 6. 发送消息:用户可以在聊天室中发送消息,包括文字、图片、文件等。 7. 接收消息:用户可以实时接收其他用户发送的消息,并在界面上展示。 8. 聊天记录存储:将聊天室中的消息进行存储,以便用户可以查看历史消息。 9. 安全性处理:对用户输入进行合法性验证,防止恶意攻击和非法操作。 10. 界面设计设计用户友好的界面,提供良好的用户体验。 以上是一个简单的JavaWeb聊天室项目的基本实现步骤,具体的实现方式和技术选型可以根据实际需求和个人喜好进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值