# 基于QT开发的局域网聊天室
![](https://w.wallhaven.cc/full/8x/wallhaven-8xjljk.png)
<!--more-->
**注意事项:**
```c++
开发工具:QT
开发语言:C++
测试软件:LAN-Chat-Room-Test文件夹
程序源码:LAN-Chat-Room-Code文件夹
注意:Windows环境下请在全英文路径下打开工程,否则会因为编码出错。
```
### 一、功能简介
<hr>
本次设计是一个简易的局域网聊天室,功能设计主要分为群聊和私聊两部分,每部分都支持基础聊天以及文件传输功能。参考了[《Qt及Qt Quick开发实战精解》](https://raw.githubusercontent.com/kelecn/images/master/Qt%E5%8F%8AQt%20Quick%E5%BC%80%E5%8F%91%E5%AE%9E%E6%88%98%E7%B2%BE%E8%A7%A3.pdf)中的群聊实例,并在群聊的基础设计了私聊这部分内容以及其他一些功能,其中消息传递使用UDP来实现,而文件传输使用TCP来实现。
![](https://cdn.jsdelivr.net/gh/kelecn/images@master/功能简介1.png)
### 二、UDP群聊部分
<hr>
本程序实现的功能是:局域网内,每个用户登录到聊天软件,则软件界面的右端可以显示在线用户列表,分别显示的是用户名,主机名,ip地址。软件左边那大块是聊天内容显示界面,这里局域网相当于qq中的qq群,即群聊。每个人可以在聊天输入界面中输入文字(还可修改文字格式&颜色)并发送。其聊天界面如下:
![](https://cdn.jsdelivr.net/gh/kelecn/images@master/%E4%B8%BB%E7%95%8C%E9%9D%A2.png)
**注:此处的客户端,同时也是服务器。**
下面分服务器端和客户端两部分来介绍:
**服务器:** 建立一个UDP Socket并绑定在固定端口后,用信号与槽的方式进行监听是否有数据来临。如果用,接收其数据并分析数据的消息类型,如果消息是新用户登录则更新用户列表并在聊天显示窗口中添加新用户上线通知;同理,如果是用户下线,则在用户列表中删除该用户且在聊天显示窗口中显示下线通知;如果是聊天消息,则接收该消息并且在窗口中显示。其流程图如下:
![](https://cdn.jsdelivr.net/gh/kelecn/images@master/%E6%9C%8D%E5%8A%A1%E5%99%A8.png)
**客户端:** 首先当客户端登录时,获取本机的用户名,计算机名和ip地址,并广播给局域网的服务器更新用户列表。然后当客户端需要发送信息时,则在聊天输入栏中输入信息并按发送键发送聊天内容,当然于此同时也广播本地系统的各种信息。其流程图如下:
![](https://cdn.jsdelivr.net/gh/kelecn/images@master/%E5%AE%A2%E6%88%B7%E7%AB%AF.png)
### 三、TCP文件传输部分
<hr>
**发送端界面:**
![](https://cdn.jsdelivr.net/gh/kelecn/images@master/%E4%BC%A0%E6%96%87%E4%BB%B61.png)
**接收端界面:**
![](https://cdn.jsdelivr.net/gh/kelecn/images@master/%E6%8E%A5%E6%94%B6%E6%96%87%E4%BB%B61.png)
**发送端,也即承担服务器角色的操作:**
在主界面程序右侧选择一个需要发送文件的用户,弹出发送端界面后,点击打开按钮,在本地计算机中选择需要发送的文件,点击发送按钮,则进度条上会显示当前文件传送的信息,有已传送文件大小信息,传送速度等信息。如果想关闭发送过程,则单击关闭按钮。其流程图如下:
![](https://cdn.jsdelivr.net/gh/kelecn/images@master/%E5%8F%91%E9%80%81%E7%AB%AF%E6%B5%81%E7%A8%8B%E5%9B%BE.png)
**接收端,也即承担客户端角色的操作:**
当在主界面中突然弹出一个对话框,问是否接自某个用户名和IP地址的文件传送信息,如果接受则单击yes按钮,否则就单击no按钮。当接收文件时,选择好接收文件所存目录和文件名后就开始接收文件了,其过程也会显示已接收文件的大小,接收速度和剩余时间的大小等信息。其流程图如下:
![](https://cdn.jsdelivr.net/gh/kelecn/images@master/%E6%8E%A5%E6%94%B6%E7%AB%AF%E6%B5%81%E7%A8%8B%E5%9B%BE.png)
### 四、私聊部分
<hr>
**私聊界面:**
![](https://cdn.jsdelivr.net/gh/kelecn/images@master/%E7%A7%81%E8%81%8A.png)
**私聊发送端流程图:**
![](https://cdn.jsdelivr.net/gh/kelecn/images@master/%E7%A7%81%E8%81%8A%E5%8F%91%E9%80%81%E7%AB%AF%E6%B5%81%E7%A8%8B%E5%9B%BE.png)
**私聊接收端流程图:**
![](https://cdn.jsdelivr.net/gh/kelecn/images@master/%E7%A7%81%E8%81%8A%E6%8E%A5%E6%94%B6%E7%AB%AF%E6%B5%81%E7%A8%8B%E5%9B%BE.png)
**下面来介绍下2者实现的具体过程:**
**A方(主动开始首次发送的一方):**
1. 在主窗口右侧双击自己想与之聊天的B方,此时A方实际上完成的工作有:用B方的主机名和ip地址新建了私聊的类privatechat,在新建该类的过程中,已经设置了显示顶端为:xxx与聊天中,对方IP:xxx,且绑定了本地ip和私聊的专用端口,同时设置了信号与槽的联系,即该端口如果有数据输入,则触发槽函数processPendingDatagrams().该函数是char.cpp中的。
2. 当上面的新建私聊类完成后,用通讯对方ip地址和其群聊专用的端口(但用的是主udp群聊的socket进行的)将以下内容分别发送出去:消息类型(Xchat),用户名,主机名,本地ip地址。完成后,在屏幕中显示私聊窗口。
3. 在私聊窗口中输入需要聊天的内容,单击发送键。该过程玩成的内容有:分别将消息类型(Message)+用户名+本地名+本地IP+消息内容本身通过私聊专用端口发送出去。在私聊窗口中显示主机名+聊天时间,换行后显示消息内容本身。
**B方(第一次信息是他人发送过来的):**
1. 当A在2步骤中用群聊的方法发送其消息类型(Xchat),其用户名,其主机名,其ip地址后,由于程序运行时已经初始化了widget.cpp中的构造函数,所以每个程序都绑定了本地地址+群聊专用的端口,一旦有数据传入,就触发widget.cpp中的槽函数processPendingDatagrams().
2. 在processPendingDatagrams()函数中,判断消息类型为Xchat后,接收缓存区内接收对方用户名,对方主机名和对方ip地址。并用接收到的主机名和ip地址新建一个私聊类。新建该私聊的过程与A中的步骤1一样。完后在程序中显示私聊窗口。
3. 当对方A按完发送按钮后,通过私聊专用端口绑定槽函数来触发chart.cpp中的processPendingDatagrams()函数,该函数中先读取消息类型(Message),然后依次读取用户名,主机名,ip地址,消息内容本身,并将对方信息和消息内容显示在聊天窗口中。
### 五、参考资料及资源下载
<hr>
[《Qt及Qt Quick开发实战精解》](https://raw.githubusercontent.com/kelecn/images/master/Qt%E5%8F%8AQt%20Quick%E5%BC%80%E5%8F%91%E5%AE%9E%E6%88%98%E7%B2%BE%E8%A7%A3.pdf)
没有合适的资源?快使用搜索试试~ 我知道了~
基于QT开发的局域网聊天室
共78个文件
dll:25个
qm:22个
png:7个
需积分: 5 0 下载量 135 浏览量
2024-09-05
21:42:42
上传
评论
收藏 23.25MB ZIP 举报
温馨提示
【项目资源】:包含前端、后端、移动开发、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源,毕业设计等各种技术项目的源码。包括C++、Java、python、web、C#、EDA等项目的源码。 【适用人群】:适用于希望学习不同技术领域的初学者或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。
资源推荐
资源详情
资源评论
收起资源包目录
基于QT开发的局域网聊天室.zip (78个子文件)
LAN-Chat-Room-new
LAN-Chat-Room-Code
widget.ui 9KB
chat.ui 7KB
app.rc 41B
under.png 838B
LAN-Chat-Room.pro.user.e171860.4.8-pre1 23KB
widget.cpp 14KB
tcpclient.ui 2KB
LAN-Chat-Room.pro.user 22KB
tcpserver.ui 2KB
tcpserver.cpp 5KB
chat.h 2KB
tcpserver.h 1KB
main.cpp 354B
tcpclient.h 1KB
send.png 758B
clear.png 1KB
color.png 960B
italic.png 992B
LAN-Chat-Room.pro 1KB
images.qrc 304B
myicon.ico 66KB
save.png 1KB
bold.png 861B
README.md 55B
tcpclient.cpp 4KB
widget.h 2KB
chat.cpp 12KB
LICENSE 1KB
README.md 7KB
LAN-Chat-Room-Test
bearer
qgenericbearer.dll 136KB
styles
qwindowsvistastyle.dll 328KB
libGLESv2.dll 7.43MB
Qt5Gui.dll 9.4MB
imageformats
qjpeg.dll 472KB
qsvg.dll 73KB
qtga.dll 68KB
qtiff.dll 543KB
qwebp.dll 561KB
qgif.dll 75KB
qicns.dll 96KB
qwbmp.dll 67KB
qico.dll 82KB
Qt5Core.dll 8.07MB
Qt5Svg.dll 576KB
Qt5Widgets.dll 8.71MB
translations
qt_lv.qm 150KB
qt_sk.qm 123KB
qt_cs.qm 171KB
qt_de.qm 209KB
qt_ja.qm 127KB
qt_fi.qm 176KB
qt_da.qm 170KB
qt_ko.qm 128KB
qt_fr.qm 162KB
qt_pl.qm 159KB
qt_ar.qm 156KB
qt_it.qm 157KB
qt_bg.qm 161KB
qt_gd.qm 185KB
qt_es.qm 161KB
qt_en.qm 23B
qt_uk.qm 155KB
qt_zh_TW.qm 125KB
qt_ca.qm 180KB
qt_hu.qm 157KB
qt_he.qm 135KB
qt_ru.qm 194KB
iconengines
qsvgicon.dll 96KB
platforms
qwindows.dll 2.83MB
libwinpthread-1.dll 46KB
libEGL.dll 66KB
LAN-Chat-Room.exe 215KB
opengl32sw.dll 15.25MB
Qt5Network.dll 2.57MB
libstdc++-6.dll 1.47MB
D3Dcompiler_47.dll 3.31MB
libgcc_s_dw2-1.dll 111KB
README.md 60B
共 78 条
- 1
资源评论
白话Learning
- 粉丝: 4486
- 资源: 2908
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 测控 23-7 谢恩堂 先行者报名.xlsx
- wbw-pop-up-window
- 基于Django+Python3.7+mysql设计的在线教育系统
- 2024.9.18 作业
- 1685670459856数据和代码.zip
- 基于Java+SpringBoot2.0+Mysql+mybatisPlus+Redis+RabbitMq设计的高并发秒杀系统
- 基于Django设计实现的blog.zip
- 西门子1200plc轴运动控制程序,此程序是之前给海康威视做的一台装路由器壳子的机器,程序包括有调用轴控制块做的控制3个伺服,1
- 基于Spring Boo+Mybatis+Redis+RabbitMQ设计的高并发电商秒杀系统
- 三菱Q系列PLC ,QD77MS16走总线控制伺服项目,实际应用的 程序结构清晰明了,通俗易懂,8个伺服,PLC程序有完整的注释
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功