Java课程设计聊天室含代码.docx
《Java课程设计聊天室含代码.docx》由会员分享,可在线阅读,更多相关《Java课程设计聊天室含代码.docx(97页珍藏版)》请在冰豆网上搜索。
Java课程设计聊天室含代码
Java程序课程设计任务书
JAVA聊天室的系统的设计与开发
1.主要内容:
用JAVA实现基于C/S模式的聊天室系统。
聊天室分为服务器端和客户端两部分,服务器端程序主要负责侦听客户端发来的信息,客户端需要登陆到服务器端才可以实现正常的聊天功能.
2.具体要求(包括技术要求等):
系统的功能要求:
A.服务器端主要功能如下:
1。
在特定端口上进行侦听,等待客户端连接。
2.用户可以配置服务器端的侦听端口,默认端口为8888.
3。
向已经连接到服务器端的用户发送系统消息。
4.统计在线人数.
5.当停止服务时,断开所有的用户连接。
B。
客户端的主要功能如下:
1。
连接到已经开启聊天服务的服务器端。
2.用户可以配置要连接的服务器端的IP地址和端口号。
3.用户可以配置连接后显示的用户名.
4。
当服务器端开启的话,用户可以随时登录和注销。
5.用户可以向所有人或某一个人发送消息。
学习并掌握一下技术:
JavaJavaBean等
熟练使用一下开发工具:
Eclipse,JCreator等
实现系统上诉的功能。
3。
进度安排:
12月28日~12月29日:
课程设计选题,查找参考资料
12月30日~1月1日:
完成系统设计
1月2日~1月5日:
完成程序代码的编写
1月6日:
系统测试与完善
1月7日:
完成课程设计报告,准备答辩
4.主要参考文献:
[1]。
张广彬孟红蕊张永宝。
Java课程设计(案例精编)[M]。
清华大学出版社.2007年版
摘要
在网络越来越发达的今天,人们对网络的依赖越来越多,越来越离不开网络,由此而产生的聊天工具越来越多,例如,国外的ICQ、国内腾讯公司开发的OICQ。
基于Java网络编程的强大功能,本次毕业设计使用Java编写一个聊天系统。
一般来说,聊天工具大多数由客户端程序和服务器程序外加服务器端用于存放客户数据的数据库组成,本系统采用客户机/服务器架构模式通过Java提供的Soket类来连接客户机和服务器并使客户机和服务器之间相互通信,由于聊天是多点对多点的而Java提供的多线程功能用多线程可完成多点对多点的聊天,数据库管理系统用SQLServer2000完成并通过JDBC—ODBC桥访问数据库。
本系统建立在JAVA平台上,系统的设计使用了面向对象技术和面向对象的设计原则.系统采用C/S结构,客户端与客户端以及客户端与服务器端之间通过Socket传送消息。
使用JAVA语言编写,开发工具采用Eclipse。
服务器端设计与实现过程中,采用了多线程技术,可以在单个程序当中同时运行多个不同的线程,执行不同的任务。
大大增强了程序对服务器资源的利用.
聊天系统完成后将可进行多人对多人的聊天,对好友进行添加、删除,对新用户的注册,发送消息、接受消息等等功能。
关键词:
多线程;客户机/服务器;JAVA;Socket;Eclipse;TCP/IP
第1章引言
1。
1背景
当今主流的聊天工具有QQ,ICQ,MSNMessenger,YahooMessenger等,国内最热门的当属QQ,腾讯QQ(OICQ)是由深圳市腾讯计算机系统公司开发的,基于Internet的即时寻呼软件。
您可以使用QQ和好友用户进行交流,信息即时发送,即时回复,收发及时、功能全面。
此外QQ还具有BP机网上寻呼、聊天室、传输文件、语音邮件、手机短讯服务等功能,QQ不仅仅是虚拟的网络寻呼机,更可与传统的无线寻呼网、GSM移动电话的短消息系统互联,目前QQ和全国多家寻呼台、移动通信公司有业务合作。
是国内不可多得的中文网络寻呼机。
QQ支持显示朋友在线信息、即时传送信息、即时交谈、即时发送文件和网址。
QQ可以在Win95/98/NT/2000操作系统下运行,是十分灵活的网络寻呼工具。
它会自动检查您是否已联网,如果您的电脑已连入Internet,可以搜索网友、显示在线网友,可以根据QQ号、昵称、姓名、email地址等关键词来查找,找到后可加入到通讯录中。
当您的通讯录中的网友在线时,QQ中朋友的头像就会显示在线,根据提示就可以发送信息,如果对方登记了寻呼机或开通了GSM手机短消息,即使离线了,您也可及时将信息传递给您的好友。
虽然以上这些软件是免费的,并且功能越来越强大。
但是它们的唯一的不足就是必须要联网或者下载到它们的服务端,要不然是没法脱离Intenet使用的。
为了能在一个没有连接到Intenet的局域网使用聊天工具,那就必须要有服务器端。
本系统就是包括服务器端与客户端,可以在局域网聊天的一个工具。
1.2课程设计内容
实现的是局域网中的聊天功能,运行服务程序后,服务器创建成功,然后使服务器对某一个设定的端口处于监听状态,当有客户端请求建立连接时,服务器就可接受请求,建立连接!
这样服务器和客户端就可相互发送消息,实现聊天功能!
系统的功能要求:
A.服务器端主要功能如下:
1。
在特定端口上进行侦听,等待客户端连接。
2。
用户可以配置服务器端的侦听端口,默认端口为8888。
3。
向已经连接到服务器端的用户发送系统消息。
4.统计在线人数.
5。
当停止服务时,断开所有的用户连接.
B。
客户端的主要功能如下:
1.连接到已经开启聊天服务的服务器端。
2。
用户可以配置要连接的服务器端的IP地址和端口号。
3。
用户可以配置连接后显示的用户名.
4.当服务器端开启的话,用户可以随时登录和注销。
5。
用户可以向所有人或某一个人发送消息
1.3任务分工
第2章聊天室系统
2。
1聊天室系统概述
聊天室是一种基于互联网的即时交流系统,最初是ICQ,也称网络寻呼机。
此类软件使得人们可以运用连上INTERNET网的电脑用户可以随时跟另外一个在线网民交谈,甚至可以通过视频看到对方的适时图像。
使人们不必担心昂贵的话费而畅快交流,并工作、交流两不误。
2.1.1聊天室系统的定义
聊天时系统是通过即时通讯技术来实现在线聊天、交流的软件.目前有2种架构形式,1、一种是C/S架构,采用客户端/服务器形式,用户使用过程中需要下载安装客户端软件,典型的代表有:
QQ、XXHI、SkypeQQVSGU、Gtalk、新浪UC、MSN等;2、采用B/S架构,即浏览器/服务端形式,这种形式的即时通讯软件,直接借助互联网为媒介、客户端无需安装任何软件,既可以体验服务器端进行沟通对话,一般运用在电子商务网站的服务商,典型的代表有Websitelive、53KF、live800等。
2.1.2聊天室系统的任务及目的
本系统主要通过客户端,服务器端来体现聊天系统的基本功能。
(1)服务器端
1.处理用户注册
2.处理用户登录
3.处理用户发送信息,服务器监控聊天内容,服务器过滤非法内容
4。
处理用户得到信息
5。
处理用户退出
8。
服务器踢人。
9。
保存服务器日志。
10.保存用户聊天信息.
(2)客户端
1。
用户注册界面及结果
2.用户登录界面及结果
3。
用户发送信息界面及结果
4.用户得到信息界面及结果
5。
用户退出界面及结果
2。
2主要聊天室系统介绍
目前国内外做聊天系统的公司很多,产品也琳琅满目,国内有诸如腾讯QQ、新浪UC、网易泡泡等,国外有著名的MSN(新版改名为LiveMessenger)以及跨平台Gaim等.本人取最具代表性的QQ和MSN进行了一些研究,作为我开发聊天系统的准备。
腾讯无疑是国内即时通讯市场的霸主,自从99年进入即时通讯领域并迅速占市场之后,其在国内用户数量始终高居榜首,即使近几年面对微软MSN的强大攻势,腾讯QQ的时常占有率依然稳步增长。
腾讯的成功与其对QQ的不断创新和完善是分不开的。
参考了许多网络上的资料,以及自己通过观察腾讯QQ运行时的各种细节.可以确定腾讯QQ是以多服务器提供服务、服务器总控客户端、客户端之间UDP直连通信的。
并且在两个客户端之间不能建立直连的情况下,才由服务器进行中转通信。
其模型如图1—1
图1—1腾讯QQ服务器—客户端模型1
与腾讯QQ不同,微软的MSNMessenger只使用了TCP作为传输层通信协议,所有客户端与服务器进行连接,然后通过与服务器的TCP连接进行中转通信。
其模型如图1-2
图1—2MSN服务器—客户端模型2
腾讯使用的模型中,服务器主要处理客户端各种状态的控制,可以极大减轻服务器的处理压力,但其内部协议和实现复杂度都较高。
而MSNMessenger所有数据都要经过服务器,服务器压力可想而知(难怪平时很少见到使用MSN进行语音视频聊天的)。
。
2。
3本章小结
这一章介绍了当前聊天室系统应该具备的功能模块,并提供了市面上比较流行的聊天室系统作为参考。
在这一章中,我们可以了解什么是聊天室系统,当前聊天室系统的市场需求,还有一个聊天室系统应该的开发目标。
第3章聊天室系统的设计
这一章是聊天室系统的设计,从系统需求分析开始,介绍开发环境和用到的开发工具,系统主要的功能设计,系统的数据流程图。
3。
1系统需求分析
聊天室的设计目标:
通过做巩固所学Java语言基本知识,增进Java语言编辑基本功,掌握JDK、JCreator等开发工具的运用,拓宽常用类库的应用,用JAVA实现基于C/S模式的聊天室系统。
3.2系统开发及运行环境
硬件平台:
❑CPU:
Pentium2.8GHz以上。
❑内存:
256MB以上。
软件平台:
❑操作系统:
WindowsXP。
❑运行环境:
JDKVersion1.6JCreator。
3.3系统主要功能要求
本系统针对局域网进行联机聊天。
聊天室分为服务器端和客户端两部分,服务器端程序主要负责侦听客户端发来的信息,客户端需要登陆到服务器端才可以实现正常的聊天功能。
本系统主要实现如下功能:
服务器:
❑在特定端口上进行侦听,等待客户端连接。
❑用户可以配置服务器端的侦听端口,默认端口为8888.
❑向已经连接到服务器端的用户发送系统消息。
❑统计在线人数。
❑当停止服务时,断开所有的用户连接。
❑系统运行稳定、安全可靠。
❑一台主机只能启动一个服务器.
客户端:
❑连接到已经开启聊天服务的服务器端.
❑用户可以配置要连接的服务器端的IP地址和端口号。
❑用户可以配置连接后显示的用户名。
❑用户可以更改聊天时的表情。
❑当服务器端开启后,用户可以随时登录和注销。
❑用户可以向所有人或某一个人发送消息。
❑系统运行稳定、安全可靠。
❑可以默认连接到自己主机启动的服务器。
3。
4系统模块化分析
3.4。
1聊天室系统总体结构
主要功能框架如下图所示:
各功能模块实现的功能为:
服务器:
端口设置:
设置倾听的端口号,默认为8888。
启动服务:
开启倾听端口,允许客户端连接。
系统消息:
服务器启动后可以在聊天室内发送消息。
停止服务:
关闭倾听端口,中断所有客户端的连接.
退出:
关闭服务器。
客户端:
用户设置:
设置聊天时显示的名称,默认为匆匆过客。
连接设置:
设置要连接的服务器所在主机的IP地址和倾听端口.
登录:
连接服务器。
发送消息:
进行聊天,可单独发送消息给聊天室中的一个人。
注销:
与服务器断开连接.
退出:
关闭客户端.
3。
4.2聊天室系统各模块介绍
服务器包含服务、帮助、聊天三大模块,其中服务模块包含端口设置、启动服务、停止服务和退出四个小模块
聊天模块可以向聊天室内所有人或个人发送系统消息或以管理员身份与其他人聊天
表3-1服务器各模块名称功能汇总表
序号
模块名
基本功能
1
端口设置
设置倾听的端口号,默认为8888。
2
启动服务
开启倾听端口,允许客户端连接。
3
停止服务
关闭倾听端口,中断所有客户端的连接.
4
退出
关闭服务器.
5
帮助
显示各个模块的功能及操作方法.
6
发送
向聊天室内发送系统消息。
客户端包含操作、设置、帮助、聊天四大模块,其中操作包含用户登录、用户注销和退出三个小模块,设置包含用户设置和连接设置两个小模块聊天模块除具备普通聊天功能外,还能进行聊天时的表情选择
表3—2客户端各模块名称功能汇总表
序号
模块名
基本功能
1
用户设置
设置聊天时显示的名称,默认为匆匆过客。
2
连接设置
设置要连接的服务器所在主机的IP地址和倾听端口。
3
用户登录
连接到服务器端。
4
用户注销
与服务器断开连接.
5
退出
关闭客户端。
6
发送
发送聊天内容
7
悄悄话
聊天内容不会被服务器和说话对象以外的人看到
3。
5系统数据流图
系统数据流图
3。
6本章小结
本章是聊天室系统的具体设计过程,有具体的需求分析、系统功能模块、系统数据流图.这里我们开始接触聊天室系统开发的最初步骤,也是很重要的一步。
第4章系统的具体实现
界面是系统之间最直接的交互界面,界面的友好性体现了软件设计的质量,并在很大程度上决定了软件是否成功。
4.1界面设计
4.1。
1服务器启动界面图
4。
1.2服务器启动成功界面图
4.1。
3客户端界面图
4。
1.4用户设置界面图
4。
1。
5用户成功登录界面图
4。
1。
6两人私聊界面图
4。
1。
7多人群聊界面图
4。
2程序设计及调试运行
利用JCreator“一次编写,各处运行"的编程优点,按功能模块结构设计菜单,布置各明细模块工作界面,编写各个模块的程序代码,进行编译连接运行,经过反复调试修改,以达到系统功能要求。
这个过程具有大量的工作量,应仔细对每个程序细节进行分析思考、编写程序并调试,做到程序简洁清楚,尽量避免可能潜在的程序错误,并在必要的地方加以注释,以便于程序阅读和修改。
4.2。
1程序调试(以服务器为例)
importjava。
awt。
*;
importjava。
awt.event。
*;
importjavax。
swing.*;
importjavax.swing.event。
*;
import。
*;
importjava.io。
*;
/*
*聊天服务端的主框架类
*/
publicclassChatServerextendsJFrameimplementsActionListener{
publicstaticintport=8888;//服务端的侦听端口
ServerSocketserverSocket;//服务端Socket
Imageicon;//程序图标
JComboBoxcombobox;//选择发送消息的接受者
JTextAreamessageShow;//服务端的信息显示
JScrollPanemessageScrollPane;//信息显示的滚动条
JTextFieldshowStatus;//显示用户连接状态
JLabelsendToLabel,messageLabel;
JTextFieldsysMessage;//服务端消息的发送
JButtonsysMessageButton;//服务端消息的发送按钮
UserLinkListuserLinkList;//用户链表
//建立菜单栏
JMenuBarjMenuBar=newJMenuBar();
//建立菜单组
JMenuserviceMenu=newJMenu(”服务(V)");
//建立菜单项
JMenuItemportItem=newJMenuItem(”端口设置(P)”);
JMenuItemstartItem=newJMenuItem("启动服务(S)”);
JMenuItemstopItem=newJMenuItem("停止服务(T)”);
JMenuItemexitItem=newJMenuItem("退出(X)");
JMenuhelpMenu=newJMenu("帮助(H)”);
JMenuItemhelpItem=newJMenuItem(”帮助(H)”);
//建立工具栏
JToolBartoolBar=newJToolBar();
//建立工具栏中的按钮组件
JButtonportSet;//启动服务端侦听
JButtonstartServer;//启动服务端侦听
JButtonstopServer;//关闭服务端侦听
JButtonexitButton;//退出按钮
//框架的大小
DimensionfaceSize=newDimension(400,600);
ServerListenlistenThread;
JPaneldownPanel;
GridBagLayoutgirdBag;
GridBagConstraintsgirdBagCon;
/**
*服务端构造函数
*/
publicChatServer(){
init();//初始化程序
//添加框架的关闭事件处理
this。
setDefaultCloseOperation(JFrame。
EXIT_ON_CLOSE);
this。
pack();
//设置框架的大小
this.setSize(faceSize);
//设置运行时窗口的位置
DimensionscreenSize=Toolkit。
getDefaultToolkit().getScreenSize();
this。
setLocation((int)(screenSize.width—faceSize.getWidth())/2,
(int)(screenSize.height-faceSize。
getHeight())/2);
this。
setResizable(false);
this。
setTitle(”聊天室服务端”);//设置标题
//程序图标
icon=getImage("icon。
gif”);
this.setIconImage(icon);//设置程序图标
show();
//为服务菜单栏设置热键’V'
serviceMenu.setMnemonic('V’);
//为端口设置快捷键为ctrl+p
portItem。
setMnemonic(’P');
portItem。
setAccelerator(KeyStroke.getKeyStroke(KeyEvent。
VK_P,InputEvent。
CTRL_MASK));
//为启动服务快捷键为ctrl+s
startItem。
setMnemonic('S');
startItem.setAccelerator(KeyStroke。
getKeyStroke(KeyEvent。
VK_S,InputEvent.CTRL_MASK));
//为端口设置快捷键为ctrl+T
stopItem。
setMnemonic('T’);
stopItem。
setAccelerator(KeyStroke。
getKeyStroke(KeyEvent.VK_T,InputEvent。
CTRL_MASK));
//为退出设置快捷键为ctrl+x
exitItem。
setMnemonic('X');
exitItem.setAccelerator(KeyStroke。
getKeyStroke(KeyEvent。
VK_X,InputEvent.CTRL_MASK));
//为帮助菜单栏设置热键'H’
helpMenu.setMnemonic('H');
//为帮助设置快捷键为ctrl+p
helpItem.setMnemonic('H’);
helpItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_H,InputEvent.CTRL_MASK));
}
/**
*程序初始化函数
*/
publicvoidinit(){
ContainercontentPane=getContentPane();
contentPane。
setLayout(newBorderLayout());
//添加菜单栏
serviceMenu。
add(portItem);
serviceMenu.add(startItem);
serviceMenu。
add(stopItem);
serviceMenu。
add(exitItem);
jMenuBar.add(serviceMenu);
helpMenu。
add(helpItem);
jMenuBar.add(helpMenu);
setJMenuBar(jMenuBar);
//初始化按钮
portSet=newJButton(”端口设置");
startServer=newJButton("启动服务”);
stopServer=newJButton(”停止服务");
exitButton=newJButton(”退出");
//将按钮添加到工具栏
toolBar.add(portSet);
toolBar。
addSeparator();//添加分隔栏
toolBar.add(startServer);
toolBar。
add(stopServer);
toolBar。
addSeparator();//添加分隔栏
toolBar.add(exitButton);
contentPane.add(toolBar,BorderLayout.NORTH);
//初始时,令停止服务按钮不可用
stopServer.setEnabled(false);
stopItem。
setEnabled(false);
//为菜单栏添加事件监听
portItem。
addActionListener(this);
startItem.addActionListener(this);
stopItem.addActionListener(this);
exitItem。
addActionListener(this);
helpItem.addActionListener(this);
//添加按钮的事件侦听
portSet。
addActionListener(this);
startServer.addActionListener(this);
stopServer.addActionListener(this);
exitButton。
addActionListener(this);
combobox=newJComboBox();
combobox.insertItemAt(”所有人",0);
combobox。
se