文章目录
前言
最近想把自己毕业设计拿出来分享,我是做了一个可以通过局域网聊天的一个聊天软件。UI设计方面我也是尽力往QQ方向去设计。本人也是在开发中学习,所以有什么错误也希望大家指正,或者有什么更好的实现办法,也可以大家一起交流,一起学习。由于项目较大,而且现在工作逐渐繁忙,因此我将各个模块分开来讲,也欢迎大家点赞、收藏、评论,多多支持,十分感谢。
一、使用工具
1. Qt Creator
本次整个项目的开发都是用Qt Creator 5.14.2进行的开发与调试,数据库的话则是用Qt内嵌的轻量级数据库:SQLite数据库进行数据存储。在这我就不过多赘述Qt相关的内容。关于Qt以及其安装流程在CSDN里面有很多大佬写的教程,十分详细!!!
二、项目介绍
聊天软件最最核心的就是通讯 ,该项目采用C/S架构进行展开,即客户端/服务端。两端同时进行开发。
1.客户端
- 客户端就是使用者使用的那个程式,它的界面能给使用者最直观的展示。
- 首先你用一款聊天软件给好友发消息,对方是怎么收到的?换台主机登录为什么信息和好友都是保存好的?密码又是怎么进行验证的?这些问题都是我们开发时需要思考的问题。当然了,答案就是因为有服务端在远程默默无闻地工作。那么客户端又是怎么跟服务端进行数据交互的呢?套接字就是整个聊天软件的核心。也是客户端与服务端进行交互时不可缺少的中心轴。
1.1 Socket套接字
- 所谓的套接字(Socket)是端点的抽象,用于网络中不同主机上的应用程序进程之间进行双向通信
Socket套接字分为三种:
(1)流套接字(SOCK_STREAM)
流套接字基于三次握手和四次挥手上,需要经过监听连接,因此它提供了可靠的数据传输服务。它保证数据的完整性,也确保了数据不会丢失。我们常说的TCP协议,正是流套接字使用的传输控制协议。
(2)数据报套接字(SOCK_DGRAM)
数据报套接字它不需要连接。也没用TCP的三次握手和四次挥手,因此它也不能保证数据传输的可靠性,数据的也没用保障,可能在传输过程中出现数据丢失或数据重复的情况。数据报套接字使用UDP协议进行数据传输。
(3)原始套接字(SOCK_RAW)
原始套接字可以读写内核没有处理的IP数据包,流套接字只能读取TCP协议数据,数据报套接字只能读取UDP协议的数据。因此,如果要访问其他协议发送的数据必须使用原始套接字。
以上三种套接字各有各的优点,也有不足之处,例如流式套接字经过三次握手和四次挥手的它,已经变得十分稳定,可以用它进行文件传输等,但像视频通话或者直播平台这些,大多都是采用数据报套接字,这样的好处就是对网络要求不会很高,这也更加适应更广大的用户。
2.服务端
2.1 数据库
- 此项目中我使用的数据库是sqlite数据库。
SQLite是一个轻量级数据库,是一个符合ACID的关系数据库管理系统。
它是个进程内的数据库,它的数据引擎不需要其他的东西去支撑,不独立于进程,能直接通过程序去使用和访问。而且QT对sqlite的兼容性做得很好,使用起来会很方便。
2.2 数据处理
- 对于服务器的数据处理相关内容比较多,后面会单独写一篇文章来讲解数据处理。
3.效果图
下面是我目前做的这个项目运行的效果图,还有一些功能还需完善和优化。UI设计的那些图标是在阿里巴巴矢量图标库里面找的,完全免费,十分实用。
-
注册页面
-
登录页面
未登录时工具栏图标是灰色,登录后工具栏图标会变更。 -
主页面
- 查找/添加页面
- 查看系统消息
- 分组修改
- 好友管理
- 群组管理
- 个人信息
- 聊天界面(待完善)
- 安全界面(待完善)
- 社区界面(待做)
4.总体系统架构图
小结
由于本人也是第一次写博客,会有很多需要改进的地方,我也会慢慢学习,这个项目我也会慢慢把它全部更新完,有问题的小伙伴可以评论区提出来,希望这篇文章对大家的Qt学习之路有所帮助。