java课设正文Word下载.docx
《java课设正文Word下载.docx》由会员分享,可在线阅读,更多相关《java课设正文Word下载.docx(27页珍藏版)》请在冰豆网上搜索。
![java课设正文Word下载.docx](https://file1.bdocx.com/fileroot1/2023-1/6/1354793f-83f5-4d9e-947d-a52bddd5ae42/1354793f-83f5-4d9e-947d-a52bddd5ae421.gif)
2.1.1聊天室系统的定义
聊天时系统是通过即时通讯技术来实现在线聊天、交流的软件。
目前有2种架构形式,1、一种是C/S架构,采用客户端/服务器形式,用户使用过程中需要下载安装客户端软件,典型的代表有:
QQ、XXHI、SkypeQQVSGU、Gtalk、新浪UC、MSN等;
2、采用B/S架构,即浏览器/服务端形式,这种形式的即时通讯软件,直接借助互联网为媒介、客户端无需安装任何软件,既可以体验服务器端进行沟通对话。
2.1.2聊天室系统的任务及目的
本系统主要通过客户端,服务器端来体现聊天系统的基本功能,服务器功能为:
(a)处理用户注册
(b)处理用户登录
(c)处理用户发送信息,服务器监控聊天内容,服务器过滤非法内容
(d)处理用户得到信息
(e)处理用户退出
(f)服务器踢人。
客户端功能为:
(a)用户注册界面及结果
(b)用户登录界面及结果
(c)用户发送信息界面及结果
(d)用户得到信息界面及结果
(e)用户退出界面及结果
(f)用户修改密码界面
2.2主要聊天室系统介绍
目前国内外做聊天系统的公司很多,产品也琳琅满目,国内有诸如腾讯QQ、新浪UC、网易泡泡等,国外有著名的MSN(新版改名为LiveMessenger)以及跨平台Gaim等。
本人取最具代表性的QQ和MSN进行了一些研究,作为我开发聊天系统的准备。
腾讯无疑是国内即时通讯市场的霸主,自从99年进入即时通讯领域并迅速占市场之后,其在国内用户数量始终高居榜首,即使近几年面对微软MSN的强大攻势,腾讯QQ的时常占有率依然稳步增长。
腾讯的成功与其对QQ的不断创新和完善是分不开的。
参考了许多网络上的资料,以及自己通过观察腾讯QQ运行时的各种细节。
可以确定腾讯QQ是以多服务器提供服务、服务器总控客户端、客户端之间UDP直连通信的。
并且在两个客户端之间不能建立直连的情况下,才由服务器进行中转通信;
其模型如图2-1:
图2-1腾讯QQ服务器-客户端模型1
与腾讯QQ不同,微软的MSNMessenger只使用了TCP作为传输层通信协议,所有客户端与服务器进行连接,然后通过与服务器的TCP连接进行中转通信。
其模型如图2-2:
图2-2MSN服务器-客户端模型2
腾讯使用的模型中,服务器主要处理客户端各种状态的控制,可以极大减轻服务器的处理压力,但其内部协议和实现复杂度都较高。
而MSNMessenger所有数据都要经过服务器,服务器压力可想而知(难怪平时很少见到使用MSN进行语音视频聊天的)。
2.3本章小结
这一章介绍了当前聊天室系统应该具备的功能模块,并提供了市面上比较流行的聊天室系统作为参考。
在这一章中,我们可以了解什么是聊天室系统,当前聊天室系统的市场需求,还有一个聊天室系统应该的开发目标。
3聊天室系统的设计
3.1系统需求分析
聊天室的设计目标:
通过做巩固所学Java语言基本知识,增进Java语言编辑基本功,掌握JDK、ORCL等开发工具的运用,拓宽常用类库的应用,用JAVA实现基于C/S模式的聊天室系统。
3.2本次系统开发及运行环境
硬件平台:
(a)CPU:
InterCorei3。
(b)内存:
2G。
软件平台:
(a)操作系统:
Windows07。
(b)运行环境:
JDKVersion1.6。
3.3系统模块化分析
3.3.1聊天室系统总体结构
主要功能框架如下图所示:
图3-1主要功能框架图
各功能模块实现的功能为:
服务器:
端口设置:
设置倾听的端口号,默认为8888。
启动服务:
开启倾听端口,允许客户端连接。
系统消息:
服务器启动后可以在聊天室内发送消息。
停止服务:
关闭倾听端口,中断所有客户端的连接。
退出:
关闭服务器。
客户端:
用户设置:
设置聊天时显示的名称,默认为匆匆过客。
连接设置:
设置要连接的服务器所在主机的IP地址和倾听端口。
登录:
连接服务器。
发送消息:
进行聊天,可单独发送消息给聊天室中的一个人。
注销:
与服务器断开连接。
关闭客户端。
3.3.2聊天室系统各模块介绍
服务器包含服务、帮助、聊天三大模块,其中服务模块包含端口设置、启动服务、停止服务和退出四个小模块聊天模块可以向聊天室内所有人或个人发送系统消息或以管理员身份与其他人聊天。
表3-1服务器各模块名称功能汇总表
序号
模块名
基本功能
1
端口设置
2
启动服务
3
停止服务
4
退出
5
帮助
显示各个模块的功能及操作方法。
6
发送
向聊天室内发送系统消息。
客户端包含操作、设置、帮助、聊天四大模块,其中操作包含用户登录、用户注销和退出三个小模块,设置包含用户设置和连接设置两个小模块聊天模块除具备普通聊天功能外,还能进行聊天时的表情选择。
表3-2客户端各模块名称功能汇总表
用户设置
连接设置
用户登录
连接到服务器端。
用户注销
发送聊天内容
7
悄悄话
聊天内容不会被服务器和说话对象以外的人看到
3.4系统数据流图
图3-2图系统数据流图
3.5本章小结
本章是聊天室系统的具体设计过程,有具体的需求分析、系统功能模块、系统数据流图。
这里我们开始接触聊天室系统开发的最初步骤,也是很重要的一步。
4系统的具体实现
界面是系统之间最直接的交互界面,界面的友好性体现了软件设计的质量,并在很大程度上决定了软件是否成功。
4.1界面设计
(a)服务器启动界面图
图4-1服务器启动界面图
(b)服务器启动成功界面图
图4-2服务器启动成功界面图
(c)客户端界面图
图4-3客户端登陆界面
(d)用户成功登录界面图
图4-4用户成功登陆界面
(e)两人私聊界面图
图4-5两人私聊界面图
(f)添加删除好友
图4-6客户端删除好友图
图4-7客户端添加好友图
图4-8添加好友成功图
图4-9添加删除好友界面图
(g)注册账户
图4-10注册账户界面图
图4-11注册成功提示图
图4-12注册账户界面图
4.2程序设计及调试运行
按功能模块结构设计菜单,布置各明细模块工作界面,编写各个模块的程序代码,进行编译连接运行,经过反复调试修改,以达到系统功能要求。
这个过程具有大量的工作量,应仔细对每个程序细节进行分析思考、编写程序并调试,做到程序简洁清楚,尽量避免可能潜在的程序错误,并在必要的地方加以注释,以便于程序阅读和修改。
4.3本章小结
本章介绍了系统的具体实现和部分关键代码,其中包括用户登录所要用到的函数和主界面的框架设计。
5设计体会及今后的改进意见
本文简单介绍了Java版的局域网聊天室,实现了局域网内的好友之间的聊天,删除添加好友,注册账号和服务器端的控制等功能。
此次功能的实现是很不易的,每一个功能模块的实现都话费了大量的时间和精力,正是由于这样,我对Java基础的理解和应用有了很大的提高,由于每个功能的实现的框架基本都是相同的,所以在前期的实现比较困难,但是在后期的编程还是相对比较简单,代码的编写是一个技术的问题更是一个时间的问题,我们只有通过不断的编程和调试才能写出更好的程序。
本次的局域网聊天中未能很好的完成用户信息的管理,在实现的方法上没有将多个线程包装成一个超类,所有从客户端到服务器和服务器到客户端的信息只通过一个模型进行传输,在这方面我还是需要很好的理解多态处理机制。
参考文献
[1]朱庆生.Java程序设计[M].北京.清华大学出版社,2011
[2]王伟平.Java编程[M].北京.清华大学出版社,2010
[3]叶乃文.Java核心技术[M].北京.机械工业出版社,2009
附录
1包的设计
主要源代码:
/**
*客户端界面
*/
packagecom.lyz.view;
importjava.awt.BorderLayout;
importjava.awt.Dimension;
importjavax.swing.BorderFactory;
importjavax.swing.ImageIcon;
importjavax.swing.JButton;
importjavax.swing.JFrame;
importjavax.swing.JLabel;
importjavax.swing.JPanel;
importjavax.swing.JScrollPane;
importjavax.swing.JTextField;
importcom.lyz.controller.client.AddDelHandler;
importcom.lyz.controller.client.ClientFrameHandler;
importcom.lyz.controller.clientListener.AddDelListener;
importcom.lyz.controller.clientListener.ClientListener;
importcom.lyz.controller.clientListener.FriListListener;
importcom.lyz.controller.clientListener.LeaveMesListener;
importcom.lyz.controller.clientListener.MesListener;
importcom.lyz.controller.clientListener.TypeListener;
importcom.lyz.controller.clientSend.SendMes;
importcom.lyz.model.FinalFile;
importcom.lyz.model.ParentModel;
importcom.lyz.util.ScreenSize;
publicclassClientFrameextendsJFrame{
privateFriPanelfriPanel;
privateParentModelpm;
privateFriListListenerfriListener;
privateMesListenermesListener;
privateTypeListenertypeListener;
privateLeaveMesListenerleaveMesListener;
privateMyPanelpan;
privateJTextFieldchoserJtf;
privateJLabelqqLab,addLab,picLab;
privateJButtondelBut,addBut;
privateJPaneladd_del_pan,topPan;
publicClientFrame(ParentModelpm){
super("
客户端"
);
//将用户模型传给登陆用户界面
this.pm=pm;
this.setBounds(ScreenSize.width-300,50,230,600);
//添加好友面板
friPanel=newFriPanel();
this.add(newJScrollPane(friPanel),BorderLayout.CENTER);
topPan=newJPanel(newBorderLayout());
topPan.setBounds(0,0,200,70);
topPan.setBorder(BorderFactory.createEtchedBorder());
//显示图像
picLab=newJLabel();
topPan.add(picLab,BorderLayout.WEST);
//显示QQ号
qqLab=newJLabel();
topPan.add(qqLab,BorderLayout.CENTER);
//确认
addLab=newJLabel();
addLab.setToolTipText("
双击确定"
topPan.add(addLab,BorderLayout.EAST);
this.add(topPan,BorderLayout.NORTH);
add_del_pan=newJPanel();
add_del_pan.setBounds(5,500,200,70);
add_del_pan.setBorder(BorderFactory.createEtchedBorder());
//查询
choserJtf=newJTextField("
"
choserJtf.setBounds(5,50,90,15);
add_del_pan.add(choserJtf);
addBut=newJButton("
添加"
addBut.setBounds(100,40,30,30);
addBut.setContentAreaFilled(false);
addBut.setFont(newjava.awt.Font("
宋体"
1,13));
add_del_pan.add(addBut);
delBut=newJButton("
删除"
delBut.setBounds(130,40,30,30);
delBut.setContentAreaFilled(false);
delBut.setFont(newjava.awt.Font("
add_del_pan.add(delBut);
this.add(add_del_pan,BorderLayout.SOUTH);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
//添加离线信息监听器
ClientFrameHandlerch=newClientFrameHandler(this);
this.addWindowListener(ch);
//添加客户端监听
ClientListenerclientListener=newClientListener(this);
clientListener.setDaemon(true);
clientListener.start();
//添加好友监听器
AddDelHandlerah=newAddDelHandler(this);
this.delBut.addActionListener(ah);
this.addBut.addActionListener(ah);
this.addLab.addMouseListener(ah);
//发送登陆信息
SendMes.sendServerMes(FinalFile.SER,pm);
}
publicvoidcloseService(){
this.friListener.close();
this.typeListener.close();
this.mesListener.close();
this.leaveMesListener.close();
}
publicclassMyPanelextendsJPanel{
publicDimensiongetPreferredSize(){
returnnewDimension(230,600);
publicvoidsetReplyPic(booleanflag){
if(flag==true){
this.picLab.setIcon(newImageIcon("
image/add_mes.gif"
));
}else{
image/recieved.gif"
}
}
/**
*服务器端界面
importjavax.swing.JTable;
importjavax.swing.table.TableModel;
importcom.lyz.controller.serverListener.AddDelFriListener;
importcom.lyz.controller.serverListener.MesListener;
importcom.lyz.controller.serverListener.RegistListener;
importcom.lyz.controller.serverListener.ServerListener;
importcom.lyz.model.dao.Dao;
publicclassServerFrameextendsJFrame{
privateJTabletab;
privateTableModelmodel;
privateJPaneltypePanel;
privateJLabeltypeLabel;
privateDaodao=newDao();
publicServerFrame(){
服务器端"
this.setBounds((ScreenSize.width-400)/2,(ScreenSize.height-300)/2,400,300);
tab=newJTable();
refreashModel();
、
this.add(newJScrollPane(tab));
//线程--服务器监听
ServerListenerserverListener=newServerListener(this);
serverListener.setDaemon(true);
serverListener.start();
*刷新表格数据
*/
publicvoidrefreashModel(){
model=dao.getLoginTableModel();
//java.lang.NullPointerException----判断dao是否是空对象
this.tab.setModel(model);
*服务器端监听
publicclassServerListenerextendsThread{
privateServerSocketserver;
privateSocketsc;
privatebooleanflag