JAVA 仿QQ聊天程序(附源码)

个人推荐:

📢📢📢 前些天发现了一个蛮有意思的人工智能学习网站,8个字形容一下 "通俗易懂,风趣幽默",感觉非常有意思,忍不住分享一下给大家。点击跳转到教程。

在这里插入图片描述

前言:

第一次通过java编写完了一个模拟QQ的C/S软件【开心,感觉用C#写C/S要舒服的多啊,哈哈哈…】,项目是通过三层架构编写,由于对JavaJDBC不是很熟悉,所有数据交换写的是真的垃圾啊,软件还是存在一些问题的,比如文件传输,由于没有采用线程,软件打开一次只能传输一次,还有就是要先发送端点击发送后才能,点击接受不然接受不到数据…软件还是挺不错【自夸一下狗头】,其他的问题就不说了,自己去看源码吧…

本篇博文目录:

    • 一.三层架构简要分析
    • 二.三层架构命名规范
    • 三.项目搭建:QQ项目
    • 四.相关功能的实现讲解
    • 五.QQ项目部署
    • 六.软件效果预览
    • 七.下载链接(旧版本)
    • 八.项目更新

一.三层架构简要分析

DAL----数据访问层
BLL-----业务逻辑层
UI-------表示层
(注:三层通过实体对象进行数据传递)
在这里插入图片描述

二.三层架构命名规范

在这里插入图片描述

三.项目搭建:QQ项目

1:com.cqgy.qq[程序入口]
客服端:Client
客服端接口:SetparametersFrameClient
接口界面:
在这里插入图片描述
服务端:Server
服务端接口:SetparametersFrameServer
接口界面:
在这里插入图片描述
2:UI表示层
在这里插入图片描述
com.cqgy.ui
登入界面:LoginFrame;注册界面:RegistrationFrame;找回密码界面:RetrievePasswordFrame;
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
聊天界面:ChatFrameTest;主界面:MainFrame;自动登入加载页面:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
AddFriendsFrame:添加好友删除好友,查询好友;FriendsInfo Frame: 用户信息界面
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
3:BLL:业务逻辑层
com.cqgy.method
在这里插入图片描述
用户操作业务逻辑层:UserDao
【感觉业务很多实属扯蛋,都是为了交作业狗头**】**
业务1:登入功能;
业务2:注册功能;
业务3:查询所有用户消息;
业务4:按照主键查询;
业务5:查询是否为好友;
业务6:查询用户登入状态;
业务7:修改用户密码;
业务8:更改用户名;
业务9:删除好友;
业务10:查询好友列表;
业务11:保存账号和密码;
业务12:保存登入界面上的单选按钮状态;
业务13:读取账号和密码;
业务14:添加好友
4:DAL:数据访问层
Com.cqgy.db
在这里插入图片描述
DBHelper:对数据库基本操作【增删改查,带参增删改查,存储过程,事务】
注:由于对java数据库不是很熟悉,这里我直接创建UserDB类来对数据进行处理,处理方式不是很恰当,很多地方出现重复较多可以通过复用技术进一步优化,但是更好的办法还是通过DBHelper对数据进行处理更符合三层架构的思想。
UserDB:对业务层涉及到数据交互部分进行数据方法的提供,比如业务1实现添加数据,UserDB直接提供一个添加数据的方法,业务层直接执行即可,不接触数据交互部分。
5:Entity:实体对象
Com.cqgy.bean
在这里插入图片描述
对实体对象进行封装,更有利于访问实体对象.

6:Common:常用操作
com.cqgy.ui.commmon
在这里插入图片描述
将经常使用的方法进行封装到一个类中,避免代码重复书写,这里主要是文件的读取写入和验证码的生成,错误日志的写入。
7:Com.cqgy.util:工具类
对数据进行验证等工具方法。
在这里插入图片描述

四.相关功能的实现讲解

1.自动登入功能
[主窗体]
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
【自动登入窗体】
在这里插入图片描述
在这里插入图片描述

2.用户是否在线功能
【数据访问层】
在这里插入图片描述
【业务层】
在这里插入图片描述
【UI表示层】
在这里插入图片描述
3.注册功能
【数据访问层】
在这里插入图片描述
【业务逻辑层】
在这里插入图片描述

【UI表示层】
(1):数据验证部分
在这里插入图片描述
(2):初始化实体对象
在这里插入图片描述
(3):实现登入业务
在这里插入图片描述
4.找回密码功能
【数据访问层】
在这里插入图片描述
【业务逻辑层】
在这里插入图片描述
【UI表示层】
(1)数据验证
在这里插入图片描述
(2)封装对象
在这里插入图片描述
(3)实现业务
在这里插入图片描述

[5.查询用户信息功能;6.搜索功能;7.添加好友;8.删除好友;9.修改好友信息;10.聊天功能;5,6,7,8,9,10:功能和前面基本一致,Ui表示层实现业务,业务逻辑层提供业务,数据传输层提供业务对数据的操作方法]。

【调试】
搜索功能—搜索出来的用户不同可操作的信息也不同
在这里插入图片描述

在这里插入图片描述

11.文件传输功能
【注:】文件传输功能未采用线程方式,所以程序运行一次只可传输一次文件
【发送端】
(1)文件可以通过拖拽的方式获取文件全路径(接受端有讲解)
通过start进行发送
在这里插入图片描述
(2)当有接受端进行了解了才能进行下一步操作不然会一直阻塞accept()中
在这里插入图片描述
(3)通过流的方式发送数据
在这里插入图片描述
(4)更新count标识(接受端有讲解
在这里插入图片描述
【接受端】
(1)选择保存路径
这里通过拖拽的方式获取文件保存路径,也可以直接复制路径
声明路径变量
在这里插入图片描述
事件监听
在这里插入图片描述
实现事件逻辑
在这里插入图片描述
(2)用户点击接受后获取数据(这里要发送端发送数据后才能进行接受不然会产生异常)
在这里插入图片描述
处理该目录下的文件名是否重复,重复在文件名后加(i)形式
在这里插入图片描述
获取发送端的数据
在这里插入图片描述
如果未接受到数据,将会一直停留在这里,进度条显示进度
在这里插入图片描述
由于程序启动一次只能传输一次,所以这里加入count标志count=0表示未使用count=1表示已经使用
在这里插入图片描述
【调试】
在这里插入图片描述
12:图片传输功能(具体代码操作请查阅源码)
在这里插入图片描述

五.QQ项目部署

(1):数据库部署
在配置文件中配置自己数据库一致的参数
在这里插入图片描述
(2)在mysql5.6中加入数据库

Mysql8.0版本需要将配置文件中 driver=com.mysql.jdbc.Driver
修改为driver=com.mysql.cj.jdbc.Driver

(3)在数据库中创建数据库和表格并添加数据

------创建表结构和数据库

/* 创建数据库 */
CREATE DATABASE  IF NOT EXISTS  qq;
use qq;
/* 用户表 */
CREATE TABLE IF NOT EXISTS user (user_id varchar(80) not null,   	 /* 用户Id  */user_pwd varchar(25)  not null,	 /* 用户密码 */user_name varchar(80) not null,  	 /* 用户名 */user_icon varchar(100) not null, 	 /* 用户头像 */state   int(2) not null,PRIMARY KEY (user_id)
);/* 用户好友表Id1和Id2互为好友 */
CREATE TABLE IF NOT EXISTS friend (user_id1 varchar(80) not null,   	 /* 用户Id1  */user_id2 varchar(80) not null,   	 /* 用户Id2  */
PRIMARY KEY (user_id1, user_id2)
);

-------添加数据

use qq;/* 用户表数据 */
INSERT INTO user VALUES('111','123', '关东升','28',0);
INSERT INTO user VALUES('222','123', '赵1', '30',0);
INSERT INTO user VALUES('333','123', '赵2', '52',0);
INSERT INTO user VALUES('888','123', '赵3', '53',0);/* 用户好友表Id1和Id2互为好友 */
INSERT INTO friend VALUES('111','222');
INSERT INTO friend VALUES('111','333');
INSERT INTO friend VALUES('888','111');
INSERT INTO friend VALUES('222','333');

【注意:插入数据时如果出现了以下错误】 14:00:58 INSERT INTO user VALUES(‘111’,‘123’,
‘关东升’,‘28’,0) Error Code: 1366. Incorrect string value:
‘\xE5\x85\xB3\xE4\xB8\x9C…’ for column ‘user_name’ at row 1 0.000
sec

在数据库中输入:

alter table user convert to character set utf8;    
alter table friend convert to character set utf8;  

然后再执行添加数据操作:

use qq;
/* 用户表数据 */
INSERT INTO user VALUES('111','123', '关东升','28',0);
INSERT INTO user VALUES('222','123', '赵1', '30',0);
INSERT INTO user VALUES('333','123', '赵2', '52',0);
INSERT INTO user VALUES('888','123', '赵3', '53',0);/* 用户好友表Id1和Id2互为好友 */
INSERT INTO friend VALUES('111','222');
INSERT INTO friend VALUES('111','333');
INSERT INTO friend VALUES('888','111');
INSERT INTO friend VALUES('222','333');

(3)启动服务端接口
在这里插入图片描述
输入端口号,然后点击设置
在这里插入图片描述

(4)启动客服端,设置IP并点击设置
在这里插入图片描述
在这里插入图片描述

(5)程序运行
在这里插入图片描述

六.软件效果预览

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

七.下载链接(旧版本)

链接: https://pan.baidu.com/s/14BaDEJ9F0Tk8ToG0PmQl4Q
提取码:w5ae
在这里插入图片描述
在这里插入图片描述

八.项目更新

###更新时间:2022年6月8号###

最近发现这个项目还是挺多人下载的,并且也收到很多朋友的留言,在安装的时候出现很多问题,所以这里对大家的问题进行一个汇总,并方便后面的朋友更容易安装和使用。

问题1:mysql安装的版本是8.0的问题?

解决步骤1:
在配置文件中将driver修改为driver=com.mysql.cj.jdbc.Driver
在这里插入图片描述

解决步骤2:
下载mysql8.0驱动

驱动下载:

  • 百度网盘方式下载( 驱动是我随便在网上搜索的8.0的驱动 )

链接:https://pan.baidu.com/s/1gTKoAYoKVoo8pitZGLeAbQ
提取码:clhp

  • mysql官网下载驱动

当然我们也可以去mysql官方下载自己需要的版本,官网地址https://downloads.mysql.com/archives/c-j/:

在这里插入图片描述
将下载下来的文件进行解压,我们只需要复制 mysql-connector-java-8.0.28.jar 文件即可:
在这里插入图片描述
解决步骤3:
在项目中添加8.0的mysql驱动

将复制的jar文件复制到项目中,并且进行Build Path
在这里插入图片描述
在这里插入图片描述
在Referenced Libraries中就会增加8.0的驱动
在这里插入图片描述

问题2:二台电脑之间是否可以通过软件进行聊天?

原有程序的话,是不可以的,因为在Server类下,有一个clientList的集合用于保存用户信息,在原来的代码中是直接创建的一个静态集合,所以当在二台机器上运行的时候,另外一台是无法获取到这个集合,所以就无法实现二台PC直接的通信,解决办法是将用户登入的信息保存的数据库中即可解决。

在这里插入图片描述

修改后的代码,我在虚拟机上进行了简单的测试(Linux可以将数据发送到Windows机器上,但是Windows机器上无法发送消息到Linux上,我猜测应该是Linux防火墙问题,Windos机器上的防火墙是关闭的(
所以一定要把Windows的防火墙进行关闭 ),如果二台Windows的话,将二台的防火墙关闭,理论上是可以实现通信的,由于代码是很久以前写的了,我也只是简单的修改一下,如果出现什么问题,你需要自己动手修改一下)

二台机器聊天截图:
在这里插入图片描述

问题3:该项目是使用的UDP还是TCP?
该项目是一个纯UDP项目,大致的通信图如下:
( 圆圈部分是服务器端,长方形部分为客户端 )

通信原理就是客户端将数据(包括接收方姓名,发送的数据)发送到本机上的服务端,服务端根据数据的接收方的信息,查找对应的Ip和端口号,将数据直接放给接收方(另一台电脑的客户端),同样的另外一台电脑也是如此。

在这里插入图片描述

问题4:修改后的程序部署问题?
步骤一:修改数据库地址
在前面我们是直接使用的本机地址,所以这里需要修改数据所在机器的IP地址
在这里插入图片描述
步骤二:mysql允许远程访问:
( "注意:使用root方式进行登入是非常危险的,所以建议最好就是新建一个用户,并授予相应权限" )
操作方法可以学习这一篇博客:MySQL初始化root密码和允许远程访问

这里记录一种方式就是授权:

登入mysql然后执行下面sql语句:

mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY'123456' WITH GRANT OPTION;
mysql>flush privileges;

步骤三:导入数据库
数据库这里我直接导出来了,放在 /项目源码/QQ/db/qq.sql
在这里插入图片描述

步骤四:端口号和IP怎么输入

Ip地址只能够输入当前电脑的IP地址,端口号二台机器保持同一个端口号即可(当然是未使用的端口)。

在这里插入图片描述
问题5:修改后的程序的下载?
最近在玩微信公众号,嘻嘻,也方便自己资源管理,微信公众号搜索程序员孤夜(或扫描下方二维码),后台回复 QQ源码 ,即可获取源码,如果有什么问题,后台留言我看见第一时间就会回复你喔!
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/54925.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2022年营销传播研究报告

第一章 行业概况 营销传播是公司试图向消费者直接或间接地告知、劝说和提醒其销售的产品和品牌信息的活动。在某种意义上,营销传播代表着公司及其品牌的声音,它们是公司与消费者进行对话和建立关系的桥梁。营销传播能够通过强化顾客忠诚度,提…

【RPA之家转载】捷报频传,影刀RPA荣获“时尚行业数字化卓越产品大奖”

RPA之家(RPA之家|RPA|RPA新闻|RPA案例|RPA应用|RPA咨询|RPA培训|RPA认证|RPA教程)是中国具有影响力的RPA垂直交流社区,社区汇聚了RPA领域的各类从业人员。其中包括RPA开发工程师、售前工程师、业务分析师、架构师、运维工程师、项目管理、项目…

哪家代运营公司比较好?天猫代运营公司十大排名任你挑选。

如今的疫情反反复复,在这种情形下,电商行业呈现了更大的发展空间。而随着互联网的发展,也让传统的实体店铺陷入了困境,于是大家纷纷进行了新的尝试,向线上电商平台进军,但是由于电商的技术壁垒比较高&#…

《python爬爬乐》入门篇:结构类型详解

python爬虫 字典 python中的字典(dict),来源于生活中的目录。它的主要特征,不是根据位置来访问数据,而是根据一个预先约定好的关键字(key)来访问指定数据(value),键和值使用“key : value”的方式来保存,可以称之为键…

不知道说些什么

周一入职新公司到今天连续干了三天,去公司基本从早干到晚,事很满,没时间看新闻看书思考。所以吧 起了这么一个标题。 最近有个瓜是绿地京津冀事业部营销部负责人陈军被实名举报,举报人举报绿地员工睡自己老婆,还怀了孩…

透过宝尊电商Q1财报,看品牌电商全渠道发展的想象力

北京时间5月18日晚间,宝尊电商公布其Q1财报,从基本面来看,宝尊电商行业龙头地位稳固。 财报显示,宝尊2021年Q1 总净营收达20.2亿元人民币,同比增33%。其中,非美国会计准则下运营利润达7,575万元人民币&…

互联网日报 | 瑞幸咖啡内部调查基本完成;12306官方支付宝小程序上线;华为openGauss正式开源...

今日看点 ✦ 瑞幸咖啡宣布内部调查基本完成,2019年净收入被夸大约21.2亿元 ✦ 华为正式宣布开源数据库能力,并成立openGauss开源社区 ✦ 紫光国微旗下紫光安全芯获得全球最高等级认证,实现中国零突破 ✦ 海航将推"嗨购自贸港"产品&…

全年GMV突破40亿元关口,为何如涵仍难造出第二个“张大奕”?

北京时间6月3日,网红电商公司如涵控股(以下简称如涵)发布了其截至3月31日的2020财年Q4及全年财报。从核心数据来看,如涵Q4营收出现下滑,但净亏损同比收窄;全年营收虽录得同比增长,亏损却在进一步…

Amazon SageMaker:搭建企业级AI模型的完整解决方案

目录 1 企业级AI应用的高昂成本2 什么是Amazon SageMaker?3 案例一:快速构建图像分类应用3.1 卷积神经网络3.2 本地测试版本3.3 Amazon SageMaker版本 4 案例二:快速构建AI绘画应用4.1 扩散模型简介4.2 模型构建与部署4.3 AI绘画测试(文生图)…

外贸业务员如何通过google搜索多个关键词批量提取客户网址?

做外贸通过google开发客户,已是主流。很多外贸公司已不做平台,完全自主开发客户。 通过google搜索客户的原理是什么?你客户的网站信息会被google收录(比如公司网址、公司介绍、公司产品、只要是网站出现的信息基本上都会被收录),…

chatgpt赋能python:Python制图:数据可视化的艺术

Python 制图: 数据可视化的艺术 作为一名有着10年 Python 编程经验的工程师,我深信数据可视化是企业或项目中至关重要的一环。Python 具有强大的数据分析和可视化能力,通过一些库,如 Matplotlib、Seaborn 和 Plotly,我们可以轻松…

chatgpt赋能python:Python坐标图:简单易用的数据可视化工具

Python 坐标图:简单易用的数据可视化工具 作为一种通用工具,Python 不仅在数据科学、自然语言处理、机器学习和深度学习等领域应用广泛,还在数据可视化方面表现出色。Python 的数据可视化库丰富多样,其中最受欢迎的就是 Matplotl…

chatgpt赋能python:Python编写简单表格:让数据可视化

Python编写简单表格:让数据可视化 在日常工作中,需要呈现各种数据,如销售额、用户数量等。在展示这些数据时,一个清晰的表格可以使信息更加易于理解。Python是一种流行的编程语言,可以使用其提供的模块和库来创建一些…

【论文阅读-Low-code LLM】使用LLM进行可视化编程

Low-code LLM: Visual Programming over LLMs link: https://arxiv.org/abs/2304.08103 repository: https://github.com/microsoft/TaskMatrix/tree/main/LowCodeLLM 摘要 大规模预训练模型(LLMs)在解决困难问题仍具有很大的挑战。这篇文章提出了可以…

抢红包算法(公平版和手速版)

当我们在群里抢红包时真的是手速越快红包金额越大吗? 答案当然是并不是,都说了是拼手气,岂能是拼手速! 不过也可以有拼手速的方法 抢红包 二倍均值法(公平版)线段切割法(手速版) 二…

除了智能音箱,AI语音还可以用在哪里?

作者:Echo 来源:科技树(ID:techtreex) 说起来可笑,每次我找不到眼镜的时候,我都想拿出手机,给我的眼镜“打个电话”,好听声辨位。 不知道有没有人,开发这种功…

会唱歌、会弹琴,清华大学 AI 学生华智冰火了

整理 | 禾木木 出品 | AI科技大本营(ID:rgznai100) 清华大学计算机系知识工程实验室,开发的中国首个原创虚拟学生——华智冰,与近日亮相。她的声音、肢体动作全部由人工智能完成。 今年6月,清华大学计算机系录取了一位…

清华大学数学与计算机学院院长,清华“冰冰”,今日亮相!

6月15日,清华大学计算机系举行“华智冰”成果发布会。作为我国首个原创虚拟学生,华智冰将入学清华大学计算机系,师从清华大学唐杰教授,即日起开启在清华大学的学习和研究生涯。 与一般的虚拟数字人不同,华智冰拥有持续…

AI语音技术的应用与发展前景

随着科技进步和产业变革的加速演进,人工智能(AI)已经成为兵家必争之地。甚至放眼全球,在政府、学术机构、企业等各个层面,AI都受到高度重视,其在学术研究、技术创新、人才教育等方面的发展都呈现全新态势。…

重磅!清华大学首个原创虚拟美女学生,“华智冰”唱歌好听到爆

点击“开发者技术前线”,选择“星标” 让一部分开发者看到未来 来自:清华大学 9月28日,清华大学首位AI虚拟学生“华智冰”正面出镜唱歌,其歌声、人类特征均由人工智能技术完成。 2021年 6月15日清华大学举行 计算机系“华智冰”成…