基于JAVA的仿QQ聊天器

Proditio

发布日期: 2019-02-11 14:25:47 浏览量: 612
评分:
star star star star star star star star star star_border
*转载请注明来自write-bug.com

第一章 引言

本系统是基于java开发的聊天室。有用户注册、用户登陆、修改密码、忘记密码、添加好友、用户聊天、群聊功能。如果服务器还没有启动,则客户端是不可以登陆、注册、忘记密码,如果在运行过程中,服务器断开则系统会有提示,聊天对象如果下线发送消息后会有弹窗提示,添加好友后有是否添加好友成功提示。

第二章 概要设计

2.1 使用平台及技术

此项目运行在Windows 10上,使用Eclipse作为IDE,用MySQL作为数据库。以Java为主要设计语言。

2.1.1 Java的优点

  • 简单性

Java实现了自动的功能收集,简化了内存管理的工作,这使程序设计更简便,同时减少了出错的可能。

  • 面向对象

Java提供了简单的类机制和动态的架构模型。对象中封装了它的状态变量和方法。很好地实现了模块化和信息隐藏;而类则提供了一类对象的原型,通过继承和重载机制,子类可以使用或重新定义父类或超类所提供的方法,从而既实现了代码的复用,又提供了一种动态的解决方案。

Java同样支持继承特性,java的类可以从其他类中继承行为,但java只支持类的单重继承,即每个类只能从一个类中继承。

Java支持界面,界面允许程序员定义方法但不立即实现,一个类可以实现多个界面,利用界面可以得到多重继承的许多优点而又没有多重继承的问题。

  • 多线程

多线程使应用程序可以同时进行不同的操作,处理不同的事件。在多线程机制中,不同的线程处理不同的任务,他们之间互不干涉,不会由于一处等待影响其他部分,这样容易实现网络上的实时交互操作。多线程保证了较高的执行效率。

  • 安全性

用于网络、分布环境下的java必须要防止病毒的入侵,java不支持指针,一切对内存的访问都必须通过对象的实例变量来实现,这样就防止了程序员使用欺骗手段访问对象的私有成员,同时也避免了指针操作中容易产生的错误。

2.1.2 MySQL介绍

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件。

MySQL是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。

MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。

2.2 环境的搭建过程

2.2.1 Eclipse的安装

https://www.eclipse.org/downloads/ 中选择64bit的选择下载安装到本地D盘。

2.2.2 MySQL的安装

https://www.mysql.com/downloads/ 中选择Microsoft Windows版本下载到本地,然后安装(按默认安装即可),设置密码MySQL Root Password并记住。

2.2.3 JDBC驱动包的下载与引入

由于Eclipse不自带JDBC驱动,然而JDBC驱动是Java连接数据库必要的包,因此按以下步骤下载引入包。

  • JDBC的下载

在浏览器输入 https://dev.mysql.com/downloads/connector/j/ ,选择zip文件下载到本地,解压到合适的位置。

  • JDBC包的导入

在项目处右键 ->Build Path ->Add External Archives ->选择下载好的jdbc驱动包.jar文件 ->打开。

2.3 功能和设计方法

总体而言,在客户端:当用户登录后,生成唯一的socket, 存放在Client实体类中,在整个客户端就一个Client类和一个socket。有一个窗口控制器——ChatUIList,用来记录用户和好友聊天框是否打开,当收到消息后,首先在ChatUIList中查询是否有好友的窗口,如果没有则新建聊天框弹出并显示消息,如果存在与好友的窗口则将消息追加到原聊天框并重新着重显示该窗口。在客户端还拥有一个“命令控制中心”——ChatTread类,在ChatTread类中判断并处理来自服务器中的命令(消息),如果是“message”那么客户端收到是来自好友的消息,如果是“requeste_add_friend”则是好友申请命令,类似有“WorldChat”, “accept_add_friend”, “refuse_to_add”, “changepwd” 等命令。在服务端:有多个socket,用SockList管理连接成功的用户名及其socket。同样在服务端也有一个“命令控制中心”——ServerTread类,它负责处理来自客户端的命令(消息),判断命令的类型,并正确处理他们,给出处理结果和判断是否处理成功,将处理后的命令转发给正确的用户。

2.3.1 注册功能

设计一个注册UI(RegisterUI)类,在打开程序后,模仿QQ在左下方有一个注册按钮,点击注册按钮后弹出注册页面,用户填完必填信息后由客户端将命令发送给服务端(如果服务器在线),服务器收到“register”命令后,连接数据库判断,如果注册成功则返回注册成功消息并弹窗提示,如果失败则弹窗提示注册失败。

2.3.2 登录功能

打开客户端后,类似QQ有登录按钮,当用户填完用户账号和用户密码并提交后,客户端将登录请求发送给给服务端判断(如果服务端在线),如果密码正确则用户登录成功,显示朋友列表(FriendsUI),否则提示密码错误或账号不存在。

2.3.3 忘记密码

在客户端右下侧有忘记密码按钮,用户点击按钮后弹出忘记密码页面(ForgetUI),用户填写用户账号后客户端将消息发往服务器,服务器在数据库中检测该账号是否存在,如果存在则显示提示问题,如果不存在则提示账号不存在。用户填写完后续相关信息后,点击“重置密码”按钮后,如果找回密码答案正确则向服务器发送修改密码请求,如果失败则弹窗提示密码错误。最后服务器将处理结果(修改密码是否成功)返还给客户端。

2.3.4 单独聊天(私聊)

用户登录成功后,双击好友后,首先判断用户与该好友是否有聊天框存在,如果不存在则创建新的聊天框(ChatUI)并在ChatUIList中登记,如果存在则将改聊天框突出显示。用户可以再聊天页面(ChatUI)发送消息,如果好友不在线,服务器会返回好友不在线提示,客户端弹窗提示,如果好友在线收到消息则无提示(类似Linux,没有消息就是好消息)。好友收到消息时,在ChatUIList中查询是否有与该好友的聊天窗口,如果没有则新建窗口显示并在ChatUIList中注册,如果存在则直接将消息追加到聊天窗口上并突出显示。

2.3.5 多人聊天(群聊)

这里实现的多人聊天式世界喊话,即在线用户都能收到世界喊话的消息,没有好友限制,实现与单独聊天类似。不同的是,服务器收到“世界喊话”命令后,在SocketList中查询当前在线用户,并将世界喊话消息发送给这些用户。

2.3.6 添加好友

在好友列表页面左下角有添加好友按钮,点击该按钮后弹出添加好友框(AddFriendUI),在添加好友框中重复输入两次欲添加的好友name便可向服务器发送好友请求。当用户收到好友请求后,同意或拒绝都像添加方反馈,添加成功后重新登录便可刷新好友列表。

2.3.7 修改密码

在好友列表右下方有修改密码按钮,点击该按钮后弹出修改密码框(ChangePwdUI),在这里只需要重复输入两次新密码即可修改密码,是否修改成功服务器都会做出应答,客户端有弹窗提示。在服务端对数据库进行操作,由于可能数据库会出错,如果数据库未成功修改密码,那么要提醒客户

第三章 详细设计

3.1 流程图介绍

3.1.1 系统总体结构设计

3.1.2 系统主体处理流程

3.1.3 系统流程逻辑

3.2 主要类图说明

3.2.1 客户端中主要类图

3.2.1.1 UI类图

3.2.1.2 消息处理、控制类图

3.2.2 服务端中主要类图

3.2.2.1 UI类图

3.2.2.2 消息处理、控制类、数据库相关图

3.3 数据库表展示

数据库名为myqquser, 此数据库中若干个表,一个用户表(tb_user),用来存储用户的信息,如用户名,用户密码,用户问题,用户答案;每一个用户有一个好友表,好友表里存着用户的好友名。

3.3.1 数据库构成截图

此时数据库中有三个用户分别为inforSec、 zzz、sdust,tb_user中存放着用户的信息,inforSec_friends中存放着inforSec的好友信息,zzz_friends存放着zzz的好友信息,sdust_friends中存放着sdust的好友列表。

3.3.2 用户表(tb_user)的结构及存放的数据

3.3.3 某一用户好友表结果及数据

3.4 主要算法、类的描述

3.4.1 客户端中主要类、算法的描述

3.4.1.1 UI类

MainFrame、FriendsUI、ChatUI、ChangeUI、AddFriendUI、RegeditUI、ForgetUI分别为主窗口页面、好友列表页面、聊天窗口、修改密码窗口、添加好友窗口、注册窗口、忘记密码窗口。这一部分主要是显示处理和逻辑处理。

3.4.1.2 消息处理、通信类

ChatUIList类主要记录客户端打开的聊天页面,处理与好友的消息弹窗。Client类中有socket负责和服务器通信。ChatTreat类是客户端的消息处理中心,处理来自服务器的各种消息并做出相应。

3.4.2 服务器端主要类、算法的描述

3.4.2.1 UI类

服务器端只有一个UI页面——StartServerFrame,因为服务器没有太多消息要显示,所以一个启动窗口即可。

3.4.2.2 消息处理、通信类

Service类中有socket,负责与客户端建立通信,每个建立的通信都存储在SocketList中,供服务器查询哪些用户上线。ServerThread类是服务器端的控制中心,负责处理来自用户端的消息,并转发给正确的用户,有时还会对数据库进行操作。

3.4.2.3 数据库处理相关

DBHelper类负责和数据库建立连接,UserService类负责处理具体的和数据库交互的内容,如查询用户账号和密码是否匹配、修改密码、注册用户、忘记密码、添加好友等操作。

第四章 测试结果与截图

注册用户

登录

忘记密码,修改密码

用户聊天,添加好友,群聊

第五章 总结

这次设计经过不懈的努力,程序基本满足聊天的需要。完成后的程序实现了用户注册、用户登录、忘记密码、写消息、发消息、回复、群聊、添加好友、修改密码等功能。给用户较好的体验。完成了登录页面、注册页面、好友列表、忘记密码、修改密码等页面框架,使得程序较美观。由于一个人完成这个项目,时间比较紧张,对网络传输的一些知识不太熟悉,所以没有完成文件传输功能。

完成的项目功能不太完善,虽然完成了群聊(世界喊话),但不能和好友列表中的具体几个人进行群聊。在进行项目时候,UI部分代码的编写不够仔细,所以部分UI不够美观。世界喊话的实现太过草率,整个页面的利用率低。后续可以在世界喊话页面增加群聊功能,在数据库中为每个人创建一个群表,记录每个人加入的群,完成真正的群聊。对UI部分进行优化,使整个项目更美观。

程序设计期间,通过询问老师、同学和网上搜索相关解答等多种方式学习到很多课堂上没有的知识,增强了解决实际问题的能力。在此之前,对于java编程技术没有很深入的认识,对其工作方式和原理缺乏透彻的认识。在这段时间里,我认真的学习了java语言开发,对编程思想有了进一步的体会,养成了一些良好的编程习惯。程序虽然完成了,但是距离完美还存在一定的差距,用java开发大型项目还有很多我需要去努力学习的知识。希望自己能不断学习和实践,争取以后做得更好。

上传的附件 cloud_download 基于JAVA的仿QQ聊天系统.zip ( 723.97kb, 27次下载 )
error_outline 下载需要10点积分

发送私信

不慌不忙,我们来日方长

8
文章数
5
评论数
最近文章
eject