当前位置: 首页 > 编程日记 > 正文

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

一 需求分析

本系统是基于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

相关文章:

错误: 编码 GBK 的不可映射字符 (0x80)

在我想要在命令行使用println输出一些中文的时候,发现编码出现错误 原因: java程序在编译的时候,需要使用JDK开发工具包中的JAVAC.EXE命令,而JDK开发工具包是国际版的,默认格式为UNICODE的编码格式。因此在默认情况下&…

HDU 2191 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活(多重背包)

传送门 Description 急!灾区的食物依然短缺!为了挽救灾区同胞的生命,心系灾区同胞的你准备自己采购一些粮食支援灾区,现在假设你一共有资金n元,而市场有m种大米,每种大米都是袋装产品,其价格不等…

A simple class to play sound on netcf (part 2)

在实际测试中发现上一片文章(A simple class to play sound on netcf)中介绍的播放声音的类在pda中运行正常,但却无法在pc中工作,简单分析了一下原因,发现是dll的问题,pc和pda播放声音时用的dll不同。pc中是…

SSL证书可以给多个域名使用吗?

欢迎访问网易云社区,了解更多网易技术产品运营经验从信任等级的角度来说,SSL证书主要分为三类:1.域名型https证书(DVSSL):信任等级一般,只需验证网站的真实性便可颁发证书保护网站;2. 企业型htt…

ASP.NET性能调整之解决Server Too Busy错误

最近公司的一个ASP.NET站点频繁出现Server Too Busy错误,具体表现为页面响应慢、经常出现Server Too Busy异常;但实际上服务器的资源消耗却很低,CPU使用只有10%左右,非常奇怪。 该站点运行环境为Windows 2000,IIS5.0&a…

IDEA 格式化代码Reform Code快捷键无效

** 看着用起来这么舒服的IDEA快捷键,突然CtrlAltL怎么按都没有反应,瞬间就不香了** 不行,我要搞一下 解决办法 快捷键冲突 一边学习IDEA,一遍你听歌多舒服啊,就是这个东西——“”“网易云音乐(当然或者其他…

ajax方法参数

jquery中的ajax方法参数总是记不住,这里记录一下。 1.url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址。 2.type: 要求为String类型的参数,请求方式(post或get)默认为get。注意其…

“解决方案资源管理器”中不能自动选择正在编辑的文档

本来正在编辑的文档应该在“解决方案资源管理器”中自动选中的,但是我的VS2005机器好像没有这个功能,后来发现 “工具->选贤”里边的“项目和解决方案->常规”里边有一项“在解决方案资源管理器中跟踪活动项”,选中后问题解决。VS2003也…

打造属于自己的underscore系列 ( 一 )

underscore作为开发中比较常用的一个javascript工具库,提供了一套丰富的函数式编程功能,该库并没有拓展原有的javascript原生对象,而是在自定义的_对象上,提供了100多个方法函数。在这个系列中,将从uderscore源码角度&…

Java案例——字符串拼接

Java案例——字符串拼接案例 1.案例需求 定义一个方法,把int数组中的数据按照指定的格式拼接成一个字符串返回,调用该方法,并在控制台输出结果 例如,数字为int[] arr {1,2,3};执行方法后的输出结果为:[1,2,3] 2.思路…

SQL同时删除两张表中的数据

DELETE user,orders from user,orders where user.idorders.user_id AND user.id#{id}; 转载于:https://www.cnblogs.com/duneF/p/7196472.html

安全与用户输入

用户数据,就是任何种类的输入(来自于 Web 请求或者 URL 中的数据,输入在 Microsoft Windows 窗体应用程序的控件中的数据,等等),它能够对代码产生影响,因为这些数据经常被直接当成参数来使用并且…

谁能搞定中国的文艺复兴,我就能搞定中国的政治改革

文化--------------经济------------------政治转载于:https://blog.51cto.com/73945/12249

构造函数以及this

实际上构造函数与普通的函数并没有区别,所以一般在开发中会使用大驼峰命名规则来区别普通的函数,构造函数实际上是通过返回一个this值来完成构造函数的创建的. 这个rutern this的操作由new这个操作符来完成,当然个人也可以手动来设置return的…

java案例——字符串反转

java案例——字符串反转 1.需求: 定义一个方法,实现字符串反转。键盘录入一个字符串,调用该方法后,在控制台输出结果 例如,键盘录入abc,输出结果cba2.思路: 1.键盘录入一个字符串,用Scanner实…

Jetson tk1 安装 CUDA,ROS,OpenCV和kinect2以及刷机以及ssh远程控制

我的jetson tk1的系统是:LTR21.3,ubuntu14.04。本文仅仅是个人总结,亲测成功。 注意:如果你是使用校园网进行安装的话,有很多源是没办法访问的,安装的时候就会出现很多问题,所以,尽量…

Refactor!™ for ASP.NET--ASP.NET代码重构插件

Teaching Demo: http://www.devexpress.com/Products/NET/IDETools/CodeRush/Training.xml有些功能在JBuilder2005中早就有了。大家了解一下吧,比较不错。Refactor! is freely available to all ASP.NET 2.0 developers and offers a comprehensive suite of tools …

面向对象的程序开发技术C++教学课件系列之四

面向对象的程序开发技术C教学课件系列之四转载于:https://blog.51cto.com/hnxdd/13205

python自动华 (十四)

Python自动化 【第十四篇】:HTML介绍 本节内容: Html概述HTML文档常用标签2. CSS 概述CSS选择器CSS常用属性1.HTML 1.1概述 HTML是英文Hyper Text Mark-up Language(超文本标记语言)的缩写,他是一种制作万维网页面标准语言(标记&a…

一些有趣的题目(java)持续更新

有趣的编程题1.面试题2.某公司面试题1.面试题 此处为正确的代码 package Java.king01.Test;class MicrosoftTest {public static void main(String[] args) {int[] arr new int[]{12,3,3,34,56,78,432};for(int i arr.length - 1;i > 0;i--){arr[i] arr[i]/arr[0];}for(…

lunix开放端口

以mysql服的3306端口为例。 1、直接打开端口:iptables -I INPUT -p tcp --dport 3306 -j ACCEPT 2、永久打开某端口首先,用vim打开防火墙配置文件:vim /etc/sysconfig/iptables然后,在iptables文件内容中加入如下内容:-A RH-Firew…

开机运行记事本怎么回事

1.删除文件%SystemRoot%\system32\wincfgs.exe%SystemRoot%\KB20060111.exe2.清除移动存储设备病毒连接好usb设备后,打开我的电脑,点击右键选择打开(不要直接打开或点“open”),然后打开菜单栏的“工具--文件夹选项--查…

IDEA快捷键及基本使用方法

IDEA常用设置一级目录快捷键导包:自动导包设置开启自动编译按住Ctrl之后滑动鼠标滚轮可以实现代码自由缩放一级目录 快捷键 导包: 1.手动导包 import java.util.Scanner; 2. 快捷键导包 Alt Enter 3.自动导包快捷键功能CtrlD复制光标所在行到下一行…

php 前台生成多维数组 后台批量添加

同一个地方绊倒两次&#xff0c;记录一下哈 1&#xff09;前台表单&#xff0c;看 name 1 <div class"tab-pane row " id"tab-1" >2 <input type"hidden" name"data[1][Type]" value class"form-control" id&q…

plsql循环语句

循环结构有loop。。end&#xff0c;while和for循环 loop基本结构 LOOP 要执行的语句; EXIT WHEN <条件语句> /*条件满足&#xff0c;退出循环语句*/ END LOOP; declare int number(4) : 1;begin loop dbms_output.put_line(我是||int|||); int : int 1; exit when int …

净空法师认为忧郁症源于缺乏伦理教育和因果教育

昨天上海的几个豆瓣佛友聚会&#xff0c;大家谈到了忧郁症的问题。   净空老法师是从教育和预防的角度讲的&#xff0c;大家的看法如何。     下面是老法师开示的连接     http://www.360doc.com/showWeb/0/0/393089.aspx 转载于:https://www.cnblogs.com/chenge/arc…

C语言博客作业04--数组

1.本章学习总结 1.1 思维导图 1.2 本章学习体会及代码量学习体会 1.2.1 学习体会 关于数组&#xff0c;数组是最基本的构造类型&#xff0c;它是一组相同类型数据的有序组合。数组中的元素在内存中连续存放&#xff0c;每个元素都属于相同的数据类型&#xff0c;用数组名和下表…

AJAX ControlToolkit学习日志-ModalPopupExtender(16)

ModalPopupExtender控件用于设置网页上文本的样式。下面看一个示例&#xff1a;1)在Vs2005中新建一个ASP.NET AJAX-Enabeld Web Project项目工程&#xff0c;命名为ModalPopupExtender1。2)在Default.aspx中的<div/>标签中添加一段文字。再添加一个LinkButton控件&#x…

Ubuntu 想要更新源 报错 “E: 无法获得锁 /var/lib/dpkg/lock-frontend - open (11: 资源暂时不可用)”

不得不说&#xff0c;想要apt -get update 一下还真的是很慢啊&#xff0c;但是刚刚装的Ubuntu有没有vim,我没法修改更新源。悲催呐~ 能够得到这个也是查了好多资料 出现这个问题的原因可能是有另外一个程序正在运行&#xff0c;由于它在运行时&#xff0c;会占用软件源更新时…

1.lamp网站构建

bs、cs结构 及优缺点 s-server , c-client , b-broswer cs结构&#xff1a;客户端--服务器 &#xff0c; 比如QQ&#xff0c;首先要下载QQ客户端&#xff0c;之后是客户端与服务器连接 &#xff0c; bs结构&#xff1a;浏览器--服务器 &#xff0c; 浏览器直接登录的&#xff…