个计算机发展潮流,采用当时最先进的设计思想,利用最新的开发技术和开发工具。使系统能够无论在功能设计上,还是在技术实现上,都处于同行业的领先地位。
安装使用简便:服务器端的安装简洁明了,客户机无需再装任何软件就可以直接注册登陆聊天。
适应性:应该能广泛应用于不同类型的企事业单位。系统采用模块化设计,用户可以根据自己的实际情况自行组合,使系统在不同的硬件环境下都能得以应用。
代码可读性好:文中的代码将尽可能简洁,易懂。
2.1.4 系统运行需求
运行环境:Windows 9x、2000、xp、2003,Linux
必要环境:JDK 1.5 以上
硬件环境:CPU 400MHz以上,内存64MB以上
2.2 数据流图
2.2.1 顶层数据流图
图2-1 顶层数据流图
2.2.2 一层数据流图
.
图2-2 一层数据流图
2.2.3 二层数据流图
图2-3 系统二层数据流图
3 概要设计
3.1系统实现原理
聊天系统的设计跟普通网站设计有着许多不同的地方,普通网站设计所考虑的因素,例如,普通网站需要对布局进入大量美化以及动画设计等等,而聊天室只要提供满足访客双方直接实时聊天即可。因此,在设计聊天系统的过程中,必须要考虑好以下几个设计要点:
在Internet上的聊天程序一般都是以服务器提供服务端连接响应,使用者通过客户端程序登录到服务器,就可以与登录在同一服务器上的用户交谈,这是一个面向连接的通信过程。因此,程序要在TCP/IP环境下,实现服务器端和客户端两部分程序。
图3-1 系统实现原理图
3.2 系统实现层次图:
图3-2 系统实现层次图
3.3各模块详细功能
3.3.1服务器端结构
图3-3 服务器端结构图
ServeFrame.java 为服务器端程序界面,负责为服务器的启动提供界面服务。
AppServer.java 为服务器端启动界面,负责监听服务器的状态,在线人数,最多在线人数,服务器名称,访问协议,服务器IP,服务器端口以及用户信息的管理,日志的保存。
Connection.java 是连接服务器和客户端的桥梁,主要负责将客户端的信息传送给服务器,并将服务器端的信息反馈给客户端,即所谓的"三次握手"。也是Socket编程的重要部分。
WordFilter.java 负责将聊天过程中不合法的话语文件等过滤掉,返回合法内容。
3.3.2 客户端结构
图3-4 客户端结构图
ChatClient.java 为客户端程序启动类,负责客户端的启动和退出。
Login.java 为客户端程序登录界面,负责用户帐号信息的验证与反馈。
Register.java 为客户端程序注册界面,负责用户帐号信息的注册验证与反馈。
ChatRoom.java 为客户端程序聊天室主界面,负责接收、发送聊天内容与服务器端的Connection.java 亲密合作。
Windowclose 为ChatRoom.java的内部类,负责监听聊天室界面的操作,当用户退出时返回给服务器信息。
Clock.java 为客户端程序的一个小程序,实现的一个石英钟功能。
4 详细设计
4.1 系统流程图
4.1.1 系统总体流程图
图4-1 系统总体流程图
4.1.2 系统客户端流程图
图4-2 客户端流程图
4.2 编写服务器端程序
4.2.1 问题陈述
1. 接受用户注册信息并保存在一个基于文件的对象型数据库。
2. 能够允许注册过的用户登录聊天界面并可以聊天。
3. 能够接受私聊信息并发送给特定的用户。
4. 服务器运行在自定义的端口上1001.
5. 服务器监控用户列表和用户聊天信息(除私聊外)。
6. 服务器踢人,发送通知。
7. 服务器保存日志。
4.2.2 解决方案
4.2.2.1 后台数据库设计
基于服务器跨平台运行的构想,服务器的后台数据库使用了SQL Server2000。
(1)login 表:
Login表
(2)register表
register表
此表主要包含了用户帐户基本信息。
聊天系统采用用户名作为用户帐号,并给每个用户生成一个唯一ID来做系统内部的用户标识。
4.2.2.2用户注册
1.去数据库读数据
首先创建一个File文件类,载入"user.txt",再用对象输入流ObjectInputStream将用户信息导入到系统中。
2.客户端请求注册
客户端通过Register.java请求注册,填写注册信息,并验证密码是否符合规定,是否两次输入一致,如不一致会提示重新输入,最后将请求信息发送给服务器端。
int flag = 0; // 是否重名判断标志
Register_Customer clientMessage = (Register_Customer) obj;
File fList = new File("user.txt");
if (fList.length() != 0)// 判断是否是第一个注册用户
{
ObjectInputStream objInput = new ObjectInputStream(
new FileInputStream(fList));
vList = (Vector) objInput.readObject();
// 判断是否有重名
for (int i = 0; i < vList.size(); i++) {
Re
上一篇:
基于Java_web的邮件管理系统-毕业设计(论文)
下一篇:
高陈基于Java超市账单管理系统