基于 QT(C++)实现的(图形界面)IM 即时通讯软件
IM 即时通讯软件1 引言1.1 项目概述本项目时北京理工大学计算机学院小学期实训项目。让我们练习了 Linux 环境下的 socket 编程会使用终端指令来操作 Linux同时熟悉 QT 在项目进程中构建 UI 和封装数据的作用锻炼面向对象的编程思想熟悉了 QT 的基本操作和语法了解了 QTCP 在网络通信中的意义。1.2 需求分析通信是人们生活中的一部分而对于多人协作的工程而言沟通和交流更是必要的而网络通信作为其中最为便利的方式已经是越来越多的公司在做工程时所要优先考虑的。而我们的项目就是基于这一需求提供同一局域网下的多人通信。1.3 运行环境Linux 操作系统QT5 及以上版本2 项目设计2.1 设计思路注册登录模块使用 QT 搭建服务器和客户端。服务器和客户端之间使用 socket 来建立连接。要求在打开客户端时能够和服务器自动连接。用户填写的用户名和密码在客户端通过套接字来发送到服务器并在服务器的数据库中匹配是否有相应的账号密码有则登录无则返回 0提示错误。注册时在客户端检测两次密码输入是否一致不一致进行提示一致则发送到服务器并写入服务器数据库用于登录时检测使用。主界面主要是用于显示已有好友我们参考了 QQ 的主界面点击好友用户名可以进行聊天这个界面还添加了聊天室功能可以和已有好友进行多人聊天还有一个功能就是点击右上角的加号可以添加好友弹出的搜索窗口可以对现有账号进行搜索并发送好友邀请。2.2 模块功能介绍登录注册模块给每个需要通信的用户分配一个账号来区分身份对已有账号的客户可以选择登录直接登入软件没有账号的用户可以选择注册功能来注册一个新的账号用来登入。主界面用来显示已添加的好友和各功能按钮聊天室将所有加入某一 IP 地址连接的服务器的用户联系在一起某一用户在其中发送消息后广播给其他连入本服务器的用户。聊天界面聊天界面用于和某一用户进行通信以及传输文件。网络通信部分鉴于 QT 良好的封装性非常便利所以我这部分是基于 QTCPsocket 开发的。在通信时服务器监听所有的 IP 地址来的通信请求并给每一个连接接进来的用户提供一个独立的套接字。客户端向特定的 IP 地址发送一个通信连接请求服务器分配一个套接字给客户端通信。客户端发送消息给服务器服务器将消息接收处理并给所有连接进这个服务器的客户端来转发这个消息实现局域网的多人通信。2.3 模块结构图2.4 程序流程图2.5 功能设计分工登录注册功能搭建登录注册服务器和数据库要求客户端能够将文本框中的消息发送到服务器并与数据库中的数据进行互动检测确认用户名和密码是否正确匹配。能够在用户错误填写或者账号不匹配时给出相应的提示。聊天通信功能搭建通信服务器要求客户端能够连接到一个特定 IP 地址的服务器中并且与其他连接到此 IP 地址服务器的客户端之间相互通信。构建聊天室和聊天框的界面和功能按钮。能够向单独的 IP 地址客户端进行通信与发送文件。主界面构建搭建注册登录之后的主界面完成好友列表和用户信息的排版构建主界面到聊天室和聊天框的交互按钮。将网络通信模块和注册登录界面通过主界面进行连接。UI 设计构建负责将其他人员为完成交互所设计的必要界面进行美化和重新设计构建对其他的界面内容进行 UI 设计。必要图片资源的搜索和写入。3详细设计使用 QT 搭建服务器和客户端。服务器和客户端使用 socket 来建立连接。IP 地址和端口号均可填写在填写后通过 connecttoHost 函数来建立对特定 IP 地址服务器的连接。当用户在文本编辑框输入文本并且发送时将信息写入 data传输到服务器服务器检测消息内容和消息长度解析后广播给所有的连入此服务器的客户端。对于服务器而言通过 listen 函数来监听连接对于每一个连接的客户端来分配一个 socket并存入 QList通过 Qlist 来检测所有连入的客户端并用于消息广播。4实现方案服务器中用 listen 进行监听。客户端填入想要连接的服务器的 IP 地址和端口号在点击进入聊天室时使用 connecttoHost 来进行连接。当服务器监听到一个连接时会根据 socket 给客户端分配一个独立的 socket 来进行通信并存储在一个 QList 列表当中。当客户端文本框中写入消息并且发送时服务器使用 readyread和 datarecvive槽函数来进行接收并将信息用 slotsend函数来广播到所有处在 Qlist 列表中的 socket 对应的客户端中。当客户端断开连接时服务器会将它所对应的套接字 socket 从 Qlist 列表中剔除。运行截图主服务器点击 connect 启动聊天室服务器点击创建聊天室启动登录注册界面填入用户名和密码登录未连接服务器、密码错误都会提示点击注册进入注册页面登录完成进入主界面点击下方进入聊天室可以进入聊天室默认端口为 8010填入连接 IP 点击进入聊天室即可进入输入消息点击发送即可发送消息。点击好友头像进入私聊文本编辑框中输入消息点发送即可发送会自动检测消息时间并且显示在框中。5系统测试bug客户端和服务器不能连接修正方法取消掉防火墙对于公用网络下的保护。bug服务器不显示从客户端接收到的消息修正方法服务器只用 read接收了消息未写输出函数显示。bug服务器接收消息时输出乱码修正方法若同时写两个 connect函数并且都用 readyread启动后面的读取函数会默认执行第一个可以在消息中设计区别符号来判断。♻️ 资源大小22.5MB➡️资源下载https://download.csdn.net/download/s1t16/87404317注更多内容可关注微信公众号【神仙别闹】如当前文章或代码侵犯了您的权益请私信作者删除

相关新闻

基于 C++ 实现日志文件压缩

基于 C++ 实现日志文件压缩

日志文件压缩 一、实验内容 ALPD公司(爱乐普第)名下有一个网站 (ALPDOJ, 爱乐普第Orange Juice) 用于在线预约橙汁。该公司的橙汁特别好喝而且十分畅销,导致网站访问量特别大,每天都有上百人登录网站预约橙汁,所以导致公司的日志记录非常的…

2026/7/11 23:13:47 阅读更多 →
springboot图书捐赠管理系统设计开发实现

springboot图书捐赠管理系统设计开发实现

背景分析图书捐赠管理系统在数字化社会中的需求日益显著。传统捐赠流程依赖人工登记、分类和追踪,效率低下且易出错。尤其在教育机构、公益组织或社区图书馆中,大量闲置图书的流转需要透明化、系统化的管理工具。SpringBoot作为轻量级Java框架&#xff0…

2026/7/9 4:21:10 阅读更多 →
springboot图书馆座位预约微信小程序系统设计实现

springboot图书馆座位预约微信小程序系统设计实现

背景分析 图书馆座位资源有限,尤其在考试周或高峰期,座位供不应求,传统的人工占座或现场排队方式效率低下,易引发纠纷。数字化管理需求迫切,微信小程序因其轻量化和高普及率成为理想载体。 技术背景 Spring Boot 提…

2026/7/10 5:47:52 阅读更多 →

最新新闻

【1688API】商品列表采集

【1688API】商品列表采集

采集场景 在1688搜索页 输入搜索,搜出后得到的多个商品列表数据。采集字段 商品标题、价格、到手价、标签、已售数量、店铺名称、评价等字段。 采集结果 采集结果可导出为Excel,CSV,HTML,数据库等格式。导出为Excel示例&#xff1…

2026/7/11 23:17:01 阅读更多 →
元初混沌 6G 全域通感一体化体系架构 第一卷二阶第十四篇 三才跨层气运互通与切换制衡模型

元初混沌 6G 全域通感一体化体系架构 第一卷二阶第十四篇 三才跨层气运互通与切换制衡模型

承启前置说明前文 11、12、13 篇依次完成三才三层独立域机理与规则确权:天基清气域传输机理、空基中气域集群协同规则、地面浊气域蜂窝调控逻辑,分别厘清三层介质、阴阳损耗、四象传播、五元调度专属特征。本篇依托元初混沌数理化生统一底层公理&#xf…

2026/7/11 23:13:00 阅读更多 →
AI创意生成技术原理与人机协作实践深度解析

AI创意生成技术原理与人机协作实践深度解析

AI与人类创意:技术视角下的深度解析在当今技术快速发展的时代,AI与人类创意的关系成为热议话题。作为一名长期关注技术发展的开发者,我经常思考AI在创意领域的真实能力边界。本文将从技术实现原理、实际应用场景和未来发展潜力三个维度&#…

2026/7/11 23:11:00 阅读更多 →
Django 项目环境隔离终极指南:告别“我本地明明能跑”的尴尬

Django 项目环境隔离终极指南:告别“我本地明明能跑”的尴尬

深入浅出,手把手教你区分开发、测试与生产环境,避开新手最常踩的坑在 Django 开发社区,有一个流传甚广的“恐怖故事”:程序员在本地调试得顺风顺水,自信满满地 git push 上线,结果生产服务器直接报出 500 错…

2026/7/11 23:08:59 阅读更多 →
3种途径获取2019中国森林冠层高度30米数据:FTP/网盘/Google Drive实测

3种途径获取2019中国森林冠层高度30米数据:FTP/网盘/Google Drive实测

2019年中国森林冠层高度数据获取与GIS应用全指南森林冠层高度数据是生态研究、碳汇评估和生物多样性保护的重要基础。2019年发布的30米分辨率中国森林冠层高度数据集,融合了GEDI、ICESat-2卫星激光雷达与Sentinel-2光学影像数据,通过神经网络引导插值方法…

2026/7/11 23:08:59 阅读更多 →
基于高频电流探头的电磁兼容(EMI/EMC)测试与诊断技术方案

基于高频电流探头的电磁兼容(EMI/EMC)测试与诊断技术方案

电磁兼容(EMI/EMC)测试是确保电子设备在复杂电磁环境中可靠运行的关键环节。高频电流探头采用非侵入式的测量方法,可以精准的捕捉电缆上的噪声电流,为诊断和解决电磁干扰问题提供可靠数据。本文详细介绍了高频电流探头在EMI/EMC测…

2026/7/11 23:08:59 阅读更多 →

日新闻

5分钟完全掌握:ComfyUI ControlNet预处理器终极使用指南

5分钟完全掌握:ComfyUI ControlNet预处理器终极使用指南

5分钟完全掌握:ComfyUI ControlNet预处理器终极使用指南 【免费下载链接】comfyui_controlnet_aux ComfyUIs ControlNet Auxiliary Preprocessors 项目地址: https://gitcode.com/gh_mirrors/co/comfyui_controlnet_aux 想要让AI图像生成真正听从你的指挥吗&…

2026/7/11 0:02:12 阅读更多 →
PIC18F45K42驱动EPT-14A4005P压电蜂鸣器方案详解

PIC18F45K42驱动EPT-14A4005P压电蜂鸣器方案详解

1. 项目背景与核心需求 在工业控制、安防系统和智能家居等领域,可靠的声音警报系统是不可或缺的基础组件。传统蜂鸣器存在音量不足、音质模糊等问题,而基于压电陶瓷技术的EPT-14A4005P蜂鸣器配合PIC18F45K42微控制器,能够构建一套适应性强、音…

2026/7/11 0:04:12 阅读更多 →
大模型推理中的算子融合优化:LayerNorm + Attention 的 CUDA Kernel 手写与验证

大模型推理中的算子融合优化:LayerNorm + Attention 的 CUDA Kernel 手写与验证

大模型推理中的算子融合优化:LayerNorm Attention 的 CUDA Kernel 手写与验证 一、GPU 利用率 30%:分开的算子吃掉所有带宽 推理服务的 GPU 利用率监测显示一个反直觉的现象:计算核心(SM)利用率不到 30%,但…

2026/7/11 0:04:12 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/11 22:54:57 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/9 13:46:46 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/11 19:55:29 阅读更多 →

月新闻