Java聊天系统实验报告.docx
《Java聊天系统实验报告.docx》由会员分享,可在线阅读,更多相关《Java聊天系统实验报告.docx(47页珍藏版)》请在冰点文库上搜索。
Java聊天系统实验报告
Java实现的聊天系统实验报告
实验作者:
李敏、王永生、陈振锚、甘利军
第一章系统概述
本实验完成的聊天系统是一个C/S体系结构网络程序的实例,其操作原理为:
服务器程序会等待客户端联机,当有用户要求加入聊天室且联机成功后,便可开始发送消息,这些消息将会以广播的方式传送给所有其他在聊天室中的成员。
第二章系统框架
2.1网络架构
以Socket通信机制实现聊天程序。
允许多个客户机连接,并设置广播、私语等多种聊天方式。
服务器用ServerSocket“侦听”进入的连接;客户机用Socket初始一次连接。
一旦客户(程序)申请建立一个套接字连接,ServerSocket就会返回(通过accept()方法)一个对应的服务器端套接字,以便进行直接通信。
1. 服务器通过ServerListen这个线程来监听、负责响应客户端的的各种信息,包括用户的登陆,用户的注册,各个客户端的信息相互转发。
2. 客户端负责为用户提供登陆界面,将信息发送至服务器,通过 ClientReceive类负责与服务器其它客户端的通信工作。
2.2系统架构
本实验完成的聊天系统是一个C/S体系结构网络程序的实例,用户可以在客户端注册,登陆,与在线好友及私聊或群聊,能够查看在线用户,查看好友列表,修改个人信息!
2.3模块功能说明
①服务器程序
(1)能等待用户联机,并建立和客户端通信的I/O通道;
(2)当有用户要求加入聊天室,先验证其帐号和密码的合法性,验证成功后允许联机并将登陆信息写入日志log表;
(3)能将用户发来的信息存入数据库保存,以便查询统计,同时能将消息广播给所有聊天室成员;
(4)能清除不正常终端的联机;
(5)系统管理:
能设置加入聊天系统的人数限制,能查看用户登陆信息和聊天信息。
②客户端程序
(1)提供用户的注册、登陆及连接服务器时ip,port的修改
(2)用户登陆后,能修改注册信息以及查看在线用户,好友列表
(3)能够与其他客户端及服务端进行各种信息转发
第三章系统详细设计
说明各模块的功能,并列出UML类图,以及类的说明
系统用例图
UML类图
(服务端)
(客户端)
类的说明参考如下:
一、ServerGUI类
1、ServerGUI类简介
服务端的一个主窗口类,服务端的main()方法在这个类里,是首先启动的,所有服务端的功能都在这个类里调用,可以通过这个类设置端口,启动聊天服务,停止服务,向所有用户或个别用户发送消息,还设置客户端最大连接数,查看用户信息,是否联机情况和用户聊天记录等
2、变量说明
数据类型
变量名
变量作用
DataBaseManager
DBM
操作数据库的类
JButton
exitButton
退出按钮
JMenuItem
exitMenuItem
退出菜单
int
height
窗口的高
JMenu
helpMenu
帮助菜单
JMenuItem
helpMenuItem
帮助子菜单
JTextField
inputField
聊天信息输入框
JLabel
label_1
为了排版的标签
JLabel
label_2
为了排版的标签
JLabel
label_3
为了排版的标签
JLabel
label_4
为了排版的标签
ServerListen
listenThread
服务端的侦听类
JTextArea
messageArea
显示全部聊天信息
JScrollPane
messageScrollPane
滚动条
JPanel
panel
放置组件
JPanel
panel2
放置组件
JPanel
panel3
放置组件
JButton
portButton
端口设置
JMenuItem
portMenuItem
端口设置
JMenuItem
selectUserListMenuItem
查看用户列表
JButton
sendButton
发送按钮
JLabel
sendMsgLab
显示发送消息标签
JLabel
sendToLab
显示发送至标签
JMenu
serverMenu
服务菜单
ServerSocket
serverSocket
此类实现服务器套接字
JMenuItem
setChatNumMenuItem
设置(限制)聊天人数
JButton
startButton
启动服务
JMenuItem
startMenuItem
启动服务
int
startX
窗口左上角的X坐标
int
startY
窗口左上角的Y坐标
JToolBar
statusBar
创建状态栏
JTextField
statusBarLab
显示状态栏信息
JButton
stopButton
停止服务
JMenuItem
stopMenuItem
停止服务
JMenu
systemMagMenu
系统管理菜单
JToolBar
toolBar
创建工具栏
JComboBox
userComboBox
用户列表下拉框
UserLinkList
userLinkList
用户链表
String
userName
用户名
int
width
窗口的宽
3、构造方法说明
方法名及参数
构造方法作用
publicServerGUI()
初始化服务端窗口
4、方法说明
返回值类型
方法名及参数
方法作用
publicvoid
actionPerformed(ActionEvente)
监听事件的实现方法
publicvoid
sendMsgToAll(Stringmsg)
向所有人发送消息
publicvoid
sendStopToAll()
向所有人发送服务器关闭的消息
publicvoid
sendSystemMessage()
向客户端用户发送消息
publicvoid
setLoc(ContainerJF)
设置窗口的位置
publicvoid
startService()
启动服务端
publicvoid
stopService()
关闭服务端
方法详细说明
(1)actionPerformed方法
publicvoidactionPerformed(ActionEvente)
Parameters:
动作事件ActionEvente
方法体 :
首先判断传进来的参数,再根据参数类型执行相应的处理动作事件
(2)sendMsgToAll方法
publicvoidsendMsgToAll(Stringmsg)
Parameters:
聊天消息Stringmsg
(3)sendStopToAll方法
publicvoidsendStopToAll()
向所有人发送服务器关闭的消息
(4)sendSystemMessage方法
publicvoidsendSystemMessage()
向客户端用户发送消息
(5)setLoc方法
publicvoidsetLoc(ContainerJF)
Parameters:
容器ContainerJF
设置窗口的位置
(6)startService方法
publicvoidstartService()
启动服务端
(7)stopService方法
publicvoidstopService()
关闭服务端
二、UserList类
1、UserList类简介
可能通过该类查看所有用户的信息,可以删除用户,可以看到用户聊天信息。
2、变量说明
数据类型
变量名
变量作用
JButton
buttonCancer
退出
JButton
buttonDelete
删除
Container
container
容器
DataBaseManager
dbm
操作数据库的类
GridBagLayout
gridBagL
布局类
JScrollPane
messageScrollPane
滚动条
JPanel
panelButton
放置按钮
JPanel
panelContainer
放置组件
ResultSet
rst
得到从数据库返回的数据
JTextArea
showMessage
显示聊天记录
String
str
写SQL语句
JTable
table
Table组件,显示用户记录
3、构造方法说明
方法名及参数
构造方法作用
publicUserList(JFrameframe)
初始化用户列表窗口
4、方法说明
返回值类型
方法名及参数
方法作用
publicvoid
actionPerformed(ActionEvente)
监听事件的实现方法
privatevoid
addContainer(JPanelpanel,JComponentcomponent,GridBagConstraintsgbc,intgridx,intgridy,intgridwidth,intgridheight)
该方法为了把组件加到一个容器里,按照指定的布局坐标
方法详细说明
(1)actionPerformed方法
publicvoidactionPerformed(ActionEvente)
Parameters:
动作事件ActionEvente
方法体 :
首先判断传进来的参数,再根据参数类型执行相应的处理动作事件
(2)addContainer方法
publicvoidaddContainer(JPanelpanel,JComponentcomponent,GridBagConstraintsgbc,intgridx,intgridy,intgridwidth,intgridheight)
Parameters:
容器JPanelpanel,组件JComponentcomponent,布局容器GridBagConstraintsgbc,X坐标intgridx,Y坐标intgridy,宽度intgridwidth,高度intgridheight
该方法为了把组件加到一个容器里,按照指定的布局坐标
三、UserLinkList类
1、UserLinkList类简介
用户链表类,可以通过该类增加,删除用户,返回用户数,根据索引查找用户等
2、变量说明
数据类型
变量名
变量作用
int
count
存用户数
Node
pointer
用户链表的结点类对象
Node
root
用户链表的结点类对象
3、构造方法说明
方法名及参数
构造方法作用
publicUserLinkList()
构造用户链表
4、方法说明
返回值类型
方法名及参数
方法作用
publicvoid
addUser(Noden)
添加用户
publicvoid
delUser(Noden)
删除用户
publicNode
findUser(intindex)
根据索引查找用户
publicNode
findUser(Stringusername)
根据用户名查找用户
publicint
getCount()
返回用户数
方法详细说明
(1)addUser方法
publicvoidaddUser(Noden)
Parameters:
用户链表的结点类Noden
添加用户
(2)delUser方法
publicvoiddelUser(Noden)
Parameters:
用户链表的结点类Noden
删除用户
(3)findUser方法
publicNodefindUser(intindex)
Parameters:
索引intindex
Returns:
用户链表的结点类
(4)findUser方法
publicNodefindUser(Stringusername)
Parameters:
用户名Stringusername
Returns:
用户链表的结点类
(5)getCount方法
publicintgetCount()
Returns:
返回用户数
四、ServerReceive类
1、ServerReceive类简介
服务器收发消息的类,它继承了Thread这个多线程的类,向客户端发送各种类型的消息,向客户端发送用户的列表
2、变量说明
数据类型
变量名
变量作用
JTextArea
textarea
定义文本区域
JTextField
textfield
定义文本框
JComboBox
combobox
定义下拉框
Node
client
定义用户链表的结点类
UserLinkList
userLinkList
定义用户链表
boolean
isStop
是否停止
3、构造方法说明
方法名及参数
构造方法作用
publicServerReceive(JTextAreatextarea,JTextFieldtextfield,JComboBoxcombobox,Nodeclient,UserLinkListuserLinkList)
设置textarea,textfield,combobox,client,userLinkList的值
4、方法说明
返回值类型
方法名及参数
方法作用
publicvoid
run()
线程里的run方法
publicvoid
sendToAll(Stringmsg)
向所有人发送消息
publicvoid
sendUserList()
向所有人发送用户的列表
方法详细说明
(1)run方法
publicvoidrun()
方法体:
调用了sendUserList()方法,向所有人发送用户的列表
只要客户端连接还开着,就向所有人发送消息,要是有用户下线了,则告诉所有人再向所有人发送消息,重新发送用户列表,刷新
(2)sendToAll方法
publicvoidsendToAll(Stringmsg)
Parameters:
发送的消息Stringmsg
方法体 :
向所有人发送消息
(3)sendUserList方法
publicvoidsendUserList()
方法体 :
向所有人发送用户的列表
五、ServerListen类
1、ServerListen类简介
继承了Thread线程的一个服务端的侦听类,用于侦听用户上线下线
2、变量说明
数据类型
变量名
变量作用
ServerSocket
server
此类实现服务器套接字
JComboBox
combobox
定义下拉框
JTextArea
textarea
定义文本区域
JTextField
textfield
定义文本框
UserLinkList
userLinkList
用户链表
Node
client
用户链表的结点类
ServerReceive
recvThread
服务器收发消息的类
boolean
isStop
是否停止
3、构造方法说明
方法名及参数
构造方法作用
publicServerListen(ServerSocketserver,JComboBoxcombobox,JTextAreatextarea,JtextFieldtextfield,UserLinkListuserLinkList)
设置server,combobox,textarea,,textfield,userLinkList的值
4、方法说明
返回值类型
方法名及参数
方法作用
publicvoid
run()
线程里的run方法,侦听客户端是否发来了信息
方法详细说明
(1)run方法
publicvoidrun()
方法体:
侦听客户端是否发来了信息,接收客户端消息,再调用ServerReceive类的线程
六、PortConf类
1、PortConf类简介
生成端口设置对话框的类,可以通过该类设置服务器开的端口.
2、变量说明
数据类型
变量名
变量作用
JPanel
panelPort
定义一个容器
JButton
save
定义保存按钮
JButton
cancel
定义取消按钮
JPanel
panelSave
定义放按钮的容器
JLabel
message
定义显示的信息标签
JTextField
portNumber
定义输入框
JLabel
DLGINFO
定义提示信息的标签
3、构造方法说明
方法名及参数
构造方法作用
publicPortConf(JFrameframe)
初始化设置端口的对话框
4、方法说明
返回值类型
方法名及参数
方法作用
privatevoid
jbInit()
初始化对话框的组件
方法详细说明
(1)jbInit方法
privatevoidjbInit()
方法体 :
初始化对话框的组件
七、Node类
1、Node类简介
用户链表的结点类.
2、变量说明
数据类型
变量名
变量作用
String
username
定义用户名
Socket
socket
定义套接字
ObjectOutputStream
output
定义输出流
ObjectInputStream
input
定义输入流
Node
next
用户链表的结点类
八、Help类
1、Help类简介
一个帮助的类,可以通过该类获得使用的方法。
2、变量说明
数据类型
变量名
变量作用
JPanel
titlePanel
定义标题容器
JPanel
contentPanel
定义内容容器
JPanel
closePanel
定义放关闭按钮的容器
JButton
close
定义一个关闭的按钮
JLabel
title
定义一个显示标题的标签
JTextArea
help
定义显示帮助的文本区域
Color
bg
定义颜色
3、构造方法说明
方法名及参数
构造方法作用
publicHelp(JFrameframe)
调用jbInit()方法,初始化窗口内容
4、方法说明
返回值类型
方法名及参数
方法作用
privatevoid
jbInit()
初始化各种组件
方法详细说明
(1)jbInit方法
privatevoidjbInit()
方法体 :
初始化各种组件
九、DataBaseManager类
1、DataBaseManager类简介
可以通过该类连接数据库,使用JDBC连接。
2、变量说明
数据类型
变量名
变量作用
Connection
con;
定义一个连接数据库的类对象
ResultSet
rs
定义返回数据结果集的类对象
Statement
stmt
定义了一个执行静态SQL语句并返回它所生成结果的对象的类对象
3、构造方法说明
方法名及参数
构造方法作用
publicDataBaseManager()
连上一个已知的数据库
4、方法说明
返回值类型
方法名及参数
方法作用
publicvoid
closeConnection()
关闭数据库连接
publicResultSet
getResult(StringstrSQL)
执行SQL语句,返回数据结果集
publicboolean
updateSql(StringstrSQL)
更新数据,返回是否成功
方法详细说明
(1)closeConnection方法
publicvoidcloseConnection()
方法体:
关闭数据库的连接
(2)getResult方法
publicResultSetgetResult(StringstrSQL)
Parameters:
SQL语句StringstrSQL
Returns:
执行SQL语句得到的数据集
(3)updateSql方法
publicbooleanupdateSql(StringstrSQL)
Parameters:
SQL语句StringstrSQL
Returns:
是否更新成功
十、ClientGUI类
1、ClientGUI类简介
该类是聊天客户端的主界面,提供了客户端聊天的一个窗口,用户可以通过该类进行注册、登陆、信息修改、查看在线用户、添加好友及登陆前的连接设置。
2、变量说明
数据类型
变量名
变量作用
JMenu
operateMenu
定义操作menu
JMenu
settingMenu
定义设置menu
JMenu
helpMenu
定义帮助menu
JMenuItem
regMenuItem
定义注册MenuItem
JMenuItem
loggingMenuItem
定义登陆MenuItem
JMenuItem
onlineUserMenuItem
定义在线用户子MenuItem
JMenuItem
logoutMenuItem
定义注销MenuItem
JMenuItem
friendListMenuItem
定义好友列表MenuItem
JMenuItem
exitMenuItem
定义退出MenuItem
JMenuItem
userSetMenuItem
定义用户设置MenuItem
JMenuItem
connectSetMenuItem
定义连接设置MenuItem
JMenuItem
helpMenuItem
定义帮助MenuItem
JTextArea
messageArea
定义消息显示area
JTextField
inputField
定义消息输入field
JToolBar
toolBar
定义工具栏。
JToolBar
statusBar
定义状态栏
JButton
use