即时通讯系统
1 系统概述
即时通讯是一款基于互联网的即时通讯软件,旨在为企业提供高效、安全、便捷的沟通工具。
本项目是一个基于Java语言开发的企业QQ系统,是基于C/S模型实现。系统可分为两个部分,服务端和客户端。服务端的工作主要是来监听和接收来自客户端的请求,然后存储并处理客户端发来的消息,并通知客户端。而客户端的功能是能够让新用户注册,通过用户名密码登陆并且使用该系统。通过服务端和客户端的协同工作最终使用户能够使用该程序,完成用户和用户之间的沟通。
1.1 功能概述
-
好友管理:支持用户进行好友添加、好友删除、修改等操作,同时也支持用户自行注册、登录、修改个人信息等操作
-
群组管理:支持用户创建、删除、修改群组,同时也支持用户加入、退出、查看群组等操作
-
即时通讯:支持用户之间的即时聊天,同时也支持群组内的多人聊天,聊天内容可以包括文字、图片、文件、表情等
-
安全性保障:所有数据传输均采用加密方式,保证用户信息和聊天内容的安全性
-
消息推送:支持消息推送功能,当有新消息到达时,系统会及时向用户发送通知,方便用户及时查看聊天记录
-
日志记录:系统会记录用户的聊天记录以及操作日志,方便管理员进行管理和监控
1.2 技术概述
1.2.1 Java基础知识:包括语法、面向对象编程
Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、多线程、动态性等特点。Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等
1.2.2 网络编程技术Socket
在本程序中为实现客户端和服务器之间的通信,使用Socket技术,socket能够通过java程序发出请求和处理网络发过来的请求。在建立双方网络连接的时候会使用到socket套接字。当网络成功建立连接后,双方都会有一个socket的实例被建立,通过使用和操作这个实例完成各种需求。对双方的连接来说,客户端和服务端并没有什·么差别socket是平等的,它们都是通过socket的实现类和它的子类来完成的
socket分为服务端和客户端两部分,服务端主要是可以监听一个特殊的端口,它能够监听并且捕获的向这个特定的端口发出的请求,这个请求就是由客户端来发起的。当连接建立之后会产生会话,完成会话之后关闭连接。而客户端主要是发起请求,它能够向某一个特定的服务器上的一个特殊的端口发起请求,然后建立连接处理会话,会话完成后和服务端一样关闭socket。客户端并不用像服务器一样规定一个特殊的打开的端口,系统会自动分配一个能够使用的端口
1.2.3 数据库java.SQL与MySQL数据库
Java.SQL是Java语言中用于访问关系型数据库的API,Java.SQL API提供了一组简单易用的接口和类来访问关系型数据库,使得开发者可以方便地进行数据库操作,Java.SQL API是面向对象的,它将数据库中的数据结构映射为Java中的对象,使得开发者可以使用面向对象的方式来操作数据库,Java.SQL API支持插件式的驱动程序架构,使得开发者可以通过添加新的驱动程序来支持更多的数据库类型
MySQL是一种开源的、关系型数据库管理系统(RDBMS),它是由瑞典MySQL AB公司开发的,现在属于Oracle公司旗下产品。MySQL广泛应用于Web应用程序的开发中,是目前使用最为广泛的关系型数据库之一。其具有高性能,可扩展性、简单易用、跨平台性、可靠性,被广泛应用于各种应用程序的开发中
1.2.4 前端技术java.swing与java.awt
Java Swing是一组用于创建图形用户界面(GUI)的Java类库。它提供了丰富的组件和工具,可以帮助开发人员构建跨平台的GUI应用程序。ava Swing提供了许多常用的GUI组件,例如按钮、文本框、下拉列表、表格等,还提供了一些高级组件,例如树形控件、分隔面板、标签页等。Java Swing提供了多种布局管理器,例如BorderLayout、FlowLayout、GridLayout等,可以帮助开发人员快速构建复杂的GUI界面
1.2.5 系统及文件流操作java.io
Java的核心库java.io提供了全面的IO接口。包括:文件读写、标准设备输出等。Java中IO是以流为基础进行输入输出的,所有数据被串行化写入输出流,或者从输入流读入。支持文件输入输出、网络输入输出、内存输入输出等多种方式,可以处理各种来源的数据
1.2.6 各类型数据处理java.util
Java.util是Java语言中一个重要的标准库,提供了许多常用的工具类和数据结构,用于处理各种数据类型、日期、时间、集合等问题。Java.util提供了众多的数据结构,如数组、列表、队列、栈、堆、哈希表、树、图等,可以满足不同场景下的数据存储和处理需求。此外提供了Date、Calendar、DateFormat、SimpleDateFormat等类,支持日期和时间的格式化、解析、计算和比较等操作
1.2.7 java.long多线程设置
java.lang包中的Thread类是Java实现多线程的核心类之一。通过创建Thread对象并调用其start()方法,可以启动一个新的线程并执行其中的代码
创建了一个新的线程后,会将其作为参数传递给Thread构造函数的Runnable对象中定义的代码块作为该线程的执行内容。调用start()方法后,该线程会在后台运行并执行其中的代码。除了Thread类,java.lang包中还提供了一些其他的类和接口,如Runnable接口、ThreadGroup类等,用于实现多线程编程。通过这些类和接口,可以方便地管理和控制多个线程的执行
2 系统设计
2.1功能设计
系统功能框架如图2-1所示:


客户端为用户提供了注册登录功能,新用户通过注册账号进入即时通讯系统,系统自动展示好友列表窗体。用户根据需求通过用户账号、用户名的搜索实现好友添加,通过查看与设置好友信息实现对好友的备注、分类与管理;用户通过群号、群名的搜索想要加入的群聊,同时用户可以选取好友创建属于自己的群聊,根据需求修改群信息实现个性化群聊。
服务端实现了三大功能,界面显示功能、业务处理功能、数据传送功能。界面显示功能通过服务端的设置把控主窗体界面显示;业务处理功能管理对应的用户线程,顺利实现用户的注册、登录与退出,依托服务器连接数据库实现聊天业务的处理,完成信息的记录与查询;数据传送功能是即时聊天系统的核心功能,实现简单信息传输的同时,支持一定大小文件与图片的传输,同时为了增加交互的趣味性,支持表情包的传输,其余功能有待开发。
2.1.1 登录界面
-
用户登录: 对输入用户名和密码进行验证。用户输入数据,发送到指定的客户端,由客户端与其相连的数据库进行比较
-
注册账号: 设置用户名、昵称、手机号、所在地、年龄、性别、密码并对信息进行存储
2.1.2 主界面
-
好友列表: 对好友分组实现创建、修改、删除;对好友实现修改备注、查看资料、清空聊天记录、置顶聊天等功能
-
群组列表: 对群组实现创建、解散、修改资料等功能
-
其他功能: 实现用户资料修改、查找/添加群和好友、查看群/好友申请列表/修改用户密码/退出登录等功能。
2.1.3聊天界面
- 实现消息发送、图片发送、表情发送、文件发送、截图、查看聊天记录、字体设置等功能。
2.2数据库设计
2.2.1 实体关系设计
即时通讯系统采用的是MySQL数据库,然后借助数据库可视化软MySQL workbeach 创建数据库,通过相应建表语句,最后完整的设计出系统数据库。
系统数据库表基本E-R表关系如图2-2所示。
系统数据库实体属性如图2-3、图2-4、图2-5、图2-6所示。





以下列出数据库设计过程中相关表的情况。
- yonghu用户信息表 :该表主要用于存储注册用户的个人账号信息,主要由账号密码、性别、年龄、昵称、电话、地址、注册日期等字段组成,其表结构如表2-1所示。
- haoyou好友表 :该表主要用于存储用户的好友信息并记录是否置顶,好友信息主要由好友名、好友备注、昵称、归属组ID组成,其表结构主要如表2-2所示。
- qun 群组表 :该表主要记录创建的群的群号、群名、群主、群备注以及群头像,其表结构主要如表2-3所示
- qunyonghu 群用户表 :该表主要记录群用户ID、用户名,以及归属群的群号,其表结构主要如表2-4所示。
- xiaoxijilu 消息记录表 :该表主要是消息记录流,记录消息的发送方、接收方、类型、内容、大小,其表结构主要如表2-5所示
- fenlei :该表主要记录用户的所属分组,主要包括用户名、归属分组名、归属分组的ID,其表结构主要如表2-6所示
- qiandao :该表用于记录用户的上线日期,其表结构主要如表2-7所示
3 系统实现
3.1登录界面
3.1.1用户登录
用户登录界面如图3-1所示。

在服务器端有Server.Task用于处理客户端发送的各种消息,当检查到消息类型为connect,进入登录审查,检查数据库签到表,如果表项不为空,说明当前账户已经在其他设备登录,返回该用户已登录信息,防之存储用户名对应的ip 端口,并查询数据库用户表项用户是否存在和密码是否正确。
如果账户密码匹配成功则返回信息,登录成功,反之返回登录失败,客户端会通过线程监听服务器返回的信息作出相应的反馈。
3.1.2注册账号
注册账号界面如图3-2所示。

另外的,在上传头像上使用java.io库中的getSelectedFile函数,在本地计算机中选取图像与头像,头像的传输与其在数据库的存储则是这一项目中较为困难的点,我们在用户表中设有headimg用于经过计算得到的存储32位的头像散列,并将其一流的形式发到对应服务器的headimg中,在用户登录时也是对应将这里的数据流发送给客户端
3.2主界面
即时通讯系统主界面如图3-3所示。

分组创建功能实现如图3-4所示,修改好友备注功能实现如图3-5所示。


创建群功能实现如图3-6所示。

添加好友功能实现如图3-7所示,添加群聊功能实现如图3-8所示,好友申请列表如图3-9所示



私聊聊天界面如图3-10所示,群聊聊天界面如图3-11所示

截图功能作为老师所提供项目本就实现的功能,在原有基础上没有做太大改动。文件传输与图片传输与用户注册或修改用户信息时头像的传输方式类似,都是同msg流实现文件在网络中传输,发送的数据会记录到数据库中,而接受放客户端在接受到想用信息后会将msg流存储与/msg文件夹下,实现了信息的本地存储。
3.4数据存储实现
数据存储结果如图3-12

-
获取数据库连接:使用getConnection方法加载MySQL数据库驱动程序"jdbc:mysql://"+ip+":3306/"+ dbname +"?characterEncoding=utf-8", username, password,并通过getConnection()方法建立数据库连接
-
在代码中实现创建数据库和数据表,比如createStatement().execute()方法执行创建数据库命令及getConn() .createStatement().executeUpdate()方法实现数据表创建
-
对建立的数据库连接进行测试Connection对象的createStatement()方法创建Statement对象,使用Statement对象执行SQL语句,通过executeQuery()方法执行查询语句
-
创建对象,使用userService.save()实现将各种所需数据数据记录进数据表中
4 结论
本项目是一个基于Java的企业QQ系统,实现了用户注册、登录、添加好友、聊天等基本功能。能够完成用户日常交流的需要。
通过本项目的实践,我们深入理解了Java语言和相关技术的应用,掌握了Swing、Java SQL、Java.util、MySQL、多线程等技术的使用,提高了自己的编码能力和项目开发经验。同时,本项目也为企业内部沟通和协作提供了一种新的方式,具有一定的实际应用价值。
5 源代码
怎么说呢,在实训过程中找代码学习是非常麻烦的,这里我就直接放部分找到的材料源代码的百度网盘吧…
链接:https://pan.baidu.com/s/1mk02u-x_Cp-ULR5G-zkLCA?pwd=pv7m
提取码:pv7m