基于JAVA的聊天室系统

Narrator

发布日期: 2019-02-02 20:00:43 浏览量: 1118
评分:
star star star star star star star star star star
*转载请注明来自write-bug.com

一、任务简要描述

用java实现一个聊天程序:

  • 使用 Java 技术完成聊天室系统,深入学习使用 Java 语言。

  • 使用 Java 的多线程机制,深入理解 Java 多线程技术的应用。

  • 使用 GUI,对 JFrame 的深入学习。

  • 使用网络编程, 掌握基于 TCP 协议的 Socket 编程, 了解 Socket编程的协议约定,掌握简单应用协议的开发。

  • 使用 C/S 架构,对网络编程有一定的了解。

二、系统需求分析

功能性需求:

  • 用户注册

  • 用户登陆

  • 一个聊天室

  • 多个客户同时聊天

  • 不能重复登陆

  • 每个人能够看到当前聊天室的情况,有多少人,都有哪些人在聊天。

  • 多个聊天室

  • 能够私聊

非功能性需求:
暂无

用例图:

三、系统设计

从角色上分析,聊天室可以有两种类型的角色:管理员和普通用户。

普通用户在登录后,就可以进入这个聊天室了,并可以选择通过聊天界面进行单人一对一的私聊或者是和大家一起群聊。如果是第一次进入该聊天室,还可以选择本模块提供的注册功能,通过提交注册信息,成为该聊天室的新用户。

管理员除了拥有普通用户的所有功能外,还可以通过专门的管理员界面,对普通用户进行管理,可以通过“管理”界面把一个或多个用户删除,让他们下次无法再登录到聊天室。

3.1 模块设计:

服务器端:

模块名 类名 功能描述
数据库操作 DBHandler 封装了一些JDBC的API,向本聊天室提供数据库操作方面的接口
服务器界面 ChatServer 定义服务器端的界面,添加事件侦听与事件处理
监听端口 ServerListen 实现服务器端用户上线与下线的侦听
消息收发 ServerReceive 实现服务器消息收发的类
端口设置 PortConf 继承自JDialog,是管理员对服务器侦听端口进行修改配置的类
用户节点 Node 用户链表的节点类,定义了链表中的用户
用户链表 UserLinkList 用户链表节点的具体实现类

客户端:

模块名 类名 功能描述
客户端界面 ChatClient 定义客户端的界面,添加事件侦听与事件处理
消息收发 CliientReceive 实现服务器端与客户端消息收发的类
连接设置 ConnectConf 是用户对所要连接的服务器的IP及侦听端口进行修改配置的类
登录 LoginFrame 提供权限检测的功能
注册 Registerframe 提供普通用户注册功能
管理 ManageFrame 提供管理员删除用户的功能

3.2 系统关键抽象的类图:

服务器端:

客户端:

3.3 数据库设计:

3.3.1 ER图(实体-关系图):

3.3.2 userInfo表的结构:

字段 中文描述 数据结构 是否为空 备注
userID 用户ID int 自增长,主键
Name 用户名 Varchar(50)
Password 密码 Varchar(50)
Role 权限 int 0 表示管理员 1 表示普通用户
Online 状态 int 0 表示离线 1 表示在线

3.3.3 Mysql数据库中保存用户信息的表如下所示:

3.4 人机界面(UI)设计:

3.4.1 服务器界面:

这是服务器端的主页面,管理员可以点击“端口设置”按钮,

设置本服务器(本计算机代替)所要监听的端口。

管理员可以点击“启动服务”来启动服务器服务,然后,可以通过想法的选择框选择发送系统消息的对象,可以是所有人,也可以是某一个人,然后再输入框里输入系统消息,然后点击发送按钮发送出去。

最后,点击“关闭服务”来关闭服务器服务,或者点击“退出”按钮,关闭服务器服务并退出服务器界面。

3.4.2 客户端界面:

如果是新用户,可以点击“注册”按钮,

输出想要设置的“用户名”和“密码”,全部操作无误后,即可成功注册;

如果是管理员,可以输入“用户名”和“密码”,然后点击“管理”,进入管理界面,删除想要删除的一个或多个用户:

如果是普通用户,可以点击“连接设置”设置想要连接的服务器的IP地址和端口号:

然后点击“登录”按钮,即可进入聊天室:

用户可以选择设置自己的状态“上线”或者“下线”,只有上线后,才能与服务器建立连接,与他人聊天。

四、系统实现

4.1 TCP网络通信

服务器端:

首先,默认的服务器端侦听的端口号是8888;

后面,管理员可以根据需要更改成自己想要的端口号,并且,客户端的用户在登录之前,也可以修改想要连接的服务器的IP地址和端口号。

当管理员点击“启动服务”按钮后,即运行startService()方法:

同理,关闭服务器服务时,

客户端:

和服务器同理,点击登录后,

服务器端的侦听进程,

此时,服务器和客户端TCP网络连接建立成功!
点击下线后,

4.2 用户链表的实现

当前在线的用户我是通过在服务器端建立一个链表实现的。
首先,用户节点类的结构如下:

然后,链表类的结构如下:

count是用来计数当前在线人数的。
另外,链表类中,定义了诸多操作链表的方法,以完成用户上线下线的业务逻辑功能。

4.3 JDBC数据库连接

用户的用户名,密码,权限等信息是保存在数据库中的,这样,用户一经注册,便能长期的使用这个账号登录聊天室系统。

我将所有的关于数据库操作的方法都写进了DBHandler类中,这样DBHandler便为服务器端提供了数据库操作的接口。

连接到Mysql数据库的方法如下:

另外,DBhandler类中,还定义了查询用户权限,用户注册,用户删除等等方法,以便于实现用户登录,用户注册等业务逻辑功能。

4.4 通信协议的制定

当服务器端与客户端建立了TCP连接后,二者之间的信息传递通过类ServerReceive和ClientReceive实现。

二者之间消息类型的识别是通过在消息的头部添加不同的“消息类型”标签实现的。

无论是服务器端还是客户端,当收到一条信息时,首先检查这条信息的首部,确定信息的类型,然后调用不同方法,已实现不同的功能。

上传的附件 cloud_download 基于JAVA的聊天室.zip ( 540.92kb, 11次下载 )
error_outline 下载需要12点积分

发送私信

英雄不问出处,强者面前全是路

11
文章数
7
评论数
最近文章
eject