热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

[源码和文档分享]基于java的仿QQ聊天工具

一需求分析本系统是基于java开发的聊天室。有用户注册、用户登陆、修改密码、忘记密码、添加好友、用户聊天、群聊功能。如果服务器还没有启动,则客户端是不可以登陆、注册、

一 需求分析

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

二 概要设计

在客户端:当用户登录后,生成唯一的socket, 存放在Client实体类中,在整个客户端就一个Client类和一个socket。有一个窗口控制器——ChatUIList,用来记录用户和好友聊天框是否打开,当收到消息后,首先在ChatUIList中查询是否有好友的窗口,如果没有则新建聊天框弹出并显示消息,如果存在与好友的窗口则将消息追加到原聊天框并重新着重显示该窗口。在客户端还拥有一个“命令控制中心”——ChatTread类,在ChatTread类中判断并处理来自服务器中的命令(消息),如果是“message”那么客户端收到是来自好友的消息,如果是“requeste_add_friend”则是好友申请命令,类似有“WorldChat”,“accept_add_friend”,“refuse_to_add”,“changepwd”等命令。

在服务端:有多个socket,用SockList管理连接成功的用户名及其socket。同样在服务端也有一个“命令控制中心”——ServerTread类,它负责处理来自客户端的命令(消息),判断命令的类型,并正确处理他们,给出处理结果和判断是否处理成功,将处理后的命令转发给正确的用户。

功能设计如下:

  • 注册功能

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

  • 登录功能

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

  • 忘记密码

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

  • 单独聊天(私聊)

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

  • 多人聊天(群聊)

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

  • 添加好友

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

  • 修改密码

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


参考文档和完整的文档和源码下载地址:

https://www.write-bug.com/article/184.html


转载于:https://www.cnblogs.com/ddgg5151/p/10091592.html


推荐阅读
  • Servlet多用户登录时HttpSession会话信息覆盖问题的解决方案
    本文讨论了在Servlet多用户登录时可能出现的HttpSession会话信息覆盖问题,并提供了解决方案。通过分析JSESSIONID的作用机制和编码方式,我们可以得出每个HttpSession对象都是通过客户端发送的唯一JSESSIONID来识别的,因此无需担心会话信息被覆盖的问题。需要注意的是,本文讨论的是多个客户端级别上的多用户登录,而非同一个浏览器级别上的多用户登录。 ... [详细]
  • JavaWeb中读取文件资源的路径问题及解决方法
    在JavaWeb开发中,读取文件资源的路径是一个常见的问题。本文介绍了使用绝对路径和相对路径两种方法来解决这个问题,并给出了相应的代码示例。同时,还讨论了使用绝对路径的优缺点,以及如何正确使用相对路径来读取文件。通过本文的学习,读者可以掌握在JavaWeb中正确找到和读取文件资源的方法。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • 本文介绍了使用postman进行接口测试的方法,以测试用户管理模块为例。首先需要下载并安装postman,然后创建基本的请求并填写用户名密码进行登录测试。接下来可以进行用户查询和新增的测试。在新增时,可以进行异常测试,包括用户名超长和输入特殊字符的情况。通过测试发现后台没有对参数长度和特殊字符进行检查和过滤。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • 在springmvc框架中,前台ajax调用方法,对图片批量下载,如何弹出提示保存位置选框?Controller方法 ... [详细]
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • Final关键字的含义及用法详解
    本文详细介绍了Java中final关键字的含义和用法。final关键字可以修饰非抽象类、非抽象类成员方法和变量。final类不能被继承,final类中的方法默认是final的。final方法不能被子类的方法覆盖,但可以被继承。final成员变量表示常量,只能被赋值一次,赋值后值不再改变。文章还讨论了final类和final方法的应用场景,以及使用final方法的两个原因:锁定方法防止修改和提高执行效率。 ... [详细]
  • centos安装Mysql的方法及步骤详解
    本文介绍了centos安装Mysql的两种方式:rpm方式和绿色方式安装,详细介绍了安装所需的软件包以及安装过程中的注意事项,包括检查是否安装成功的方法。通过本文,读者可以了解到在centos系统上如何正确安装Mysql。 ... [详细]
  • 代理模式的详细介绍及应用场景
    代理模式是一种在软件开发中常用的设计模式,通过在客户端和目标对象之间增加一层中间层,让代理对象代替目标对象进行访问,从而简化系统的复杂性。代理模式可以根据不同的使用目的分为远程代理、虚拟代理、Copy-on-Write代理、保护代理、防火墙代理、智能引用代理和Cache代理等几种。本文将详细介绍代理模式的原理和应用场景。 ... [详细]
  • 在C#中,使用关键字abstract来定义抽象类和抽象方法。抽象类是一种不能被实例化的类,它只提供部分实现,但可以被其他类继承并创建实例。抽象类可以用于类、方法、属性、索引器和事件。在一个类声明中使用abstract表示该类倾向于作为其他类的基类成员被标识为抽象,或者被包含在一个抽象类中,必须由其派生类实现。本文介绍了C#中抽象类和抽象方法的基础知识,并提供了一个示例代码。 ... [详细]
author-avatar
陈汉文爱_290
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有