当前位置: 首页 > news >正文

国庆 day 5

QT实现TCP服务器客户端搭建的代码,现象

服务器

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);server = new QTcpServer(this);connect (server,&QTcpServer::newConnection,this,&Widget::newConnection_slot);
}Widget::~Widget()
{delete ui;
}void Widget::on_startBtn_clicked()
{quint16 port = ui->portEdit->text().toUInt();if(!server->listen(QHostAddress::Any, port)){QMessageBox::information(this, "失败", "监听失败");return ;}else{QMessageBox::information(this, "成功", "服务器启动成功");}
}void Widget::newConnection_slot()
{qDebug()<<"您有新的客户端发来连接请求";QTcpSocket *s = server->nextPendingConnection();clientList.push_back(s);connect(s, &QTcpSocket::readyRead, this, &Widget::readyRead_slot);
}void Widget::readyRead_slot()
{qDebug()<<"有新的客户端消息发来了";//遍历客户端链表,将无效的客户端移除for(int i=0; i<clientList.size(); i++){//判断当前套接字是否是有效连接//函数原型: SocketState state() const;//参数:无//返回值:套接字的状态,如果是0,表示该套接字为无效连接if(clientList[i]->state() ==0){//将该套接字移除客户端容器clientList.removeAt(i);}}//遍历客户端链表,判断是哪个客户端发来的数据for(int i=0; i<clientList.size(); i++){//函数原型:qint64 bytesAvailable() const override;//功能:求当前客户端套接字中待读数据的字节数//参数:无//返回值:待读数据的字节数,如果是0,表示无数据待读if(clientList[i]->bytesAvailable() != 0){//将该套接字中的数据读取出来QByteArray msg = clientList[i]->readAll();//将数据展示到ui界面ui->msgWidget->addItem( QString::fromLocal8Bit(msg) );//将接受到的数据,转发给所有客户端for(int j=0; j<clientList.size(); j++){clientList[j]->write(msg);}}}
}

客户端

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);socket = new QTcpSocket(this);//此时,已经向服务器发送连接请求了,如果成功连接服务器,那么该客户端就会自动发射一个connected的信号//我们可以将该信号连接到自定义的槽函数中处理逻辑//由于只需要连接一次,所以将连接写在构造函数中connect(socket, &QTcpSocket::connected, this, &Widget::connected_slot);//如果服务器向客户端发来消息,那么该客户端就会自动发射一个readyRead信号//我们可以将该进行连接到自定义的槽函数中处理相关逻辑connect(socket, &QTcpSocket::readyRead, this, &Widget::readyRead_slot);//当成功与服务器断开连接后,该客户端会自动发射一个disconnected的信号//我们可以将该信号连接到自定义的槽函数中处理相关逻辑//由于该连接只需连接一次即可,所以放在构造函数中进行connect(socket, &QTcpSocket::disconnected, this, &Widget::disconnected_slot);
}
Widget::~Widget()
{delete ui;
}//连接服务器按钮对应的槽函数
void Widget::on_connectBtn_clicked()
{//获取ui界面上的相关信息userName = ui->userNameEdit->text();         //获取用户名QString ip = ui->ipEdit->text();            //主机地址quint16 port = ui->portEdit->text().toUInt();        //端口号//函数原型:virtual void connectToHost(const QHostAddress &address, quint16 port);//功能:将客户端连接到给定的服务器//参数1:服务器的主机地址//参数2:端口号//返回值:无socket->connectToHost(ip, port);//此时,已经向服务器发送连接请求了,如果成功连接服务器,那么该客户端就会自动发射一个connected的信号//我们可以将该信号连接到自定义的槽函数中处理逻辑//由于只需要连接一次,所以将连接写在构造函数中}//处理connected信号的槽函数的定义
void Widget::connected_slot()
{QMessageBox::information(this, "成功", "您已经成功进入聊天室");//向服务器发送一条数据:***:进入聊天室QString msg = userName +": 进入聊天室";socket->write(msg.toLocal8Bit());          //将数据写给服务器
}//处理readyRead信号的槽函数的定义
void Widget::readyRead_slot()
{//读取套接字中的信息QByteArray msg = socket->readAll();//将数据展示到ui界面ui->msgWidget->addItem(QString::fromLocal8Bit(msg));
}//发送按钮对应的槽函数
void Widget::on_sendBtn_clicked()
{//获取ui界面输入的内容QString msg =userName+ ": " + ui->msgEdit->text();//发送给服务器socket->write(msg.toLocal8Bit());//清空编辑框内容ui->msgEdit->clear();
}//断开服务器按钮对应的槽函数
void Widget::on_disconnectBtn_clicked()
{QString msg = userName +": 离开聊天室";socket->write(msg.toLocal8Bit());//断开连接//函数原型: virtual void disconnectFromHost();socket->disconnectFromHost();//当成功与服务器断开连接后,该客户端会自动发射一个disconnected的信号//我们可以将该信号连接到自定义的槽函数中处理相关逻辑//由于该连接只需连接一次即可,所以放在构造函数中进行
}//disconnected信号对应槽函数的定义
void Widget::disconnected_slot()
{QMessageBox::information(this, "提示", "退出成功");
}

相关文章:

国庆 day 5

QT实现TCP服务器客户端搭建的代码&#xff0c;现象 服务器 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);server new QTcpServer(this);connect (server,&…...

计算机网络 | OSI 参考模型

计算机网络 | OSI 参考模型 计算机网络 | OSI 参考模型应用层表示层会话层传输层网络层数据链路层物理层 参考视频&#xff1a;王道计算机考研 计算机网络 参考书&#xff1a;《2022年计算机网络考研复习指导》 计算机网络 | OSI 参考模型 OSI 参考模型自下而上分为7层&…...

uniapp 实现地图头像上的水波纹效果

最近实现了uniapp 地图头像水波纹的效果&#xff0c;话不多说&#xff0c;先来看看视频效果吧&#xff1a;链接 在这里具体的代码就不放出来了&#xff0c;还是利用了uniapp的 uni.createAnimation 方法&#xff0c;因为cover-view 不支持一些css 的动画效果&#xff0c;所以这…...

Zabbix7.0 LTS新功能

一、简介 LTS是长期支持。LTS版本支持5年。如果更喜欢稳定性&#xff0c;未涉及到最新的功能&#xff0c;可以选次新的LTS或者更低解决方案。而Zabbix6.4是最新的主要版本不属于LTS版本。 二、新功能 从以下几个方面介绍部分新功能&#xff1a; 性能提升&#xff1a;内存储存…...

充电100%并非都是美事,有时少点更有溢出!如何正确为iPhone充电

iPhone是非凡的设备&#xff0c;但一旦电池耗尽&#xff0c;它们就会失去光泽。这就是为什么照看电池内部并确保始终正确充电很重要。 在这篇文章中&#xff0c;我们解释了如果你想让你的iPhone每天运行到深夜&#xff0c;并尽可能多地保持这种状态&#xff0c;你需要采取的步…...

【软件测试】JUnit详解

文章目录 一. Junit是什么?二.Junit中常见的注解1. Test2. BeforeAll & AfterAll3. BeforeEach & AfterEach4. ParameterizedTest参数化5. Disabled6. Order 三. 测试套件1. 通过class运行测试用例2. 通过包运行测试用例 四. 断言 一. Junit是什么? JUnit是一个用于…...

hive统计页面停留时间

1、背景&#xff1a;通过业务埋点数据&#xff0c;统计用户在页面的停留时间 样例数据&#xff0c;样例数据存入表tmp&#xff0c; 有如下字段用户uid、动作时间戳time、页面名称pn、动作名称action SELECT 12345 AS uid, 1695613731020 AS time, 搜索 AS pn, click AS acti…...

LeetCode 24.两两交换链表中的结点

题目链接 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 题目解析 首先可以特判一下&#xff0c;如果结点数目小于等于1&#xff0c;则直接返回即可&#xff0c;因为数目小于等于1就不需要交换了。 然后我们可以创建一个虚拟的头结点&#xff0c;然…...

【每日一记】OSPF区域划分详讲、划分区域的优点好处

个人名片&#xff1a; &#x1f43c;作者简介&#xff1a;一名大二在校生&#xff0c;喜欢编程&#x1f38b; &#x1f43b;‍❄️个人主页&#x1f947;&#xff1a;小新爱学习. &#x1f43c;个人WeChat&#xff1a;hmmwx53 &#x1f54a;️系列专栏&#xff1a;&#x1f5bc…...

复旦管院启动科创战略,培养科技研发人才,引领未来发展!

今年夏天&#xff0c;600多位优秀的企业家成为复旦大学EMBA 2023级新生。在疫情结束后&#xff0c;他们选择百战归来再读书&#xff0c;重新回到久违的课堂&#xff0c;共同探索科创大时代下企业的商业本质&#xff0c;开启新的学习与人生旅程。复旦大学管理学院院长陆雄文教授…...

Infinity同步

...

C语言:转义字符

目录 话不多说&#xff0c;先上表 \n \? \ \" \\ \t \a \ddd 附一张ASCII表 \xdd 练习 话不多说&#xff0c;先上表 一一举例解释下哈 \n 读取到结尾标识符\0 printf("demo\n\0Zh"); // demo \? 在书写连续多个问号时使用&#xff0c;防止…...

为什么 0.1 + 0.1 !== 0.2

为什么 0.1 0.1 ! 0.2 总结了几个很有意思的基础题目&#xff0c;分享一下。 为什么 0.1 0.1 ! 0.2 看到这个问题&#xff0c;不得不想到计算机中的数据类型&#xff0c;其中浮点数表示有限的精度。那么它就无法精确的表示所有的十进制小数&#xff0c;所以在在某些情况下…...

超详细!主流大语言模型的技术原理细节汇总!

1.比较 LLaMA、ChatGLM、Falcon 等大语言模型的细节&#xff1a;tokenizer、位置编码、Layer Normalization、激活函数等。 2. 大语言模型的分布式训练技术&#xff1a;数据并行、张量模型并行、流水线并行、3D 并行、零冗余优化器 ZeRO、CPU 卸载技术 ZeRo-offload、混合精度训…...

本人4年测试经验,211 本科计算机专业,由于互联网裁员,然后谈谈我最近测试面试的总结

本人4年测试经验&#xff0c;211 本科计算机专业&#xff0c;由于互联网裁员&#xff0c;最近在 bosss 上投了些简历&#xff0c;测试开发岗&#xff0c;看看目前市场情况。 虽然都在说大环境不好&#xff0c;失业的人很多&#xff0c;我最近约面试的还是比较多的&#xff0c;…...

Android中级——Activity数据恢复过程

Activity数据恢复 onSaveInstanceState()onRestoreInstanceState()扩展 onSaveInstanceState() 在Activity调用onStop()之前调用会onSaveInstanceState()&#xff0c;如下 final void performStopActivity(IBinder token, boolean saveState, String reason) {ActivityClient…...

国内就能使用的chatgpt网页版,包含AIGC应用工具

Chatgpt的出现在多个领域带来了重要的影响。它能够显著提高我们的工作效率&#xff0c;无论是编写文案代码还是回答常见问题&#xff0c;都能在短时间内完成任务。通过Chatgpt&#xff0c;我们能够迅速获取所需答案。随着人工智能技术的不断发展&#xff0c;相信在未来AI能够带…...

Fast DDS之RTPS

目录 RTPS的使用 RTPS层实现了RTPS标准。DDS层概念映射关系如下&#xff1a; DDS LayerRTPS LayerDomainRTPSDomainDomainParticipantRTPSParticipantDataWriterRTPSWriterDataReaderRTPSReader RTPS的使用...

【算法|动态规划No.16】leetcode931. 下降路径最小和

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 &#x1f354;本专栏旨在提高自己算法能力的同时&#xff0c;记录一下自己的学习过程&#xff0c;希望…...

Jenkins 构建时动态获取参数

文章目录 问题简介Groovy 脚本配置进阶 问题 在做jenkins项目时&#xff0c;有些参数不是固定写死的&#xff0c;而是动态变化的&#xff0c;这时我们可以用 Active Choices 插件来远程调用参数 问题解决方案&#xff1a;执行构建前使用Groovy Scrip调用本地脚本&#xff0c;…...

别再折腾官方源了!用XianDian-IaaS-v2.2在CentOS7上30分钟搞定OpenStack最小化部署

30分钟极速部署OpenStack&#xff1a;XianDian-IaaS在CentOS7上的实战指南 OpenStack作为开源云计算平台的标杆&#xff0c;其强大的灵活性和模块化设计吸引了大量企业用户。但官方部署流程的复杂性往往让初学者望而却步——依赖项冲突、版本兼容性问题、繁琐的配置步骤&#x…...

AFL++实战:从零开始用WSL搭建模糊测试环境(附libxml2案例)

AFL实战指南&#xff1a;WSL环境下的模糊测试从入门到精通 模糊测试&#xff08;Fuzz Testing&#xff09;作为软件安全测试的重要手段&#xff0c;近年来在漏洞挖掘领域展现出惊人的效果。对于Windows平台开发者而言&#xff0c;Windows Subsystem for Linux&#xff08;WSL&…...

如何将 iQOO 手机备份到Mac

iQOO是vivo旗下的智能手机品牌&#xff0c;以其强劲的性能、出色的游戏体验和极具竞争力的价格而闻名。它深受那些希望以合理价格购买高性能Android手机的用户欢迎。然而&#xff0c;由于缺乏官方的 macOS 管理工具&#xff0c;许多用户发现将 iQOO 手机备份到Mac并非易事。幸运…...

CloudFlare Workers实现高级邮箱转发:过滤垃圾邮件+自动分类实战

CloudFlare Workers实现高级邮箱转发&#xff1a;过滤垃圾邮件自动分类实战 邮箱已经成为现代人工作和生活中不可或缺的工具&#xff0c;但随之而来的垃圾邮件、广告推广和各类通知也让收件箱变得杂乱无章。对于开发者和技术爱好者来说&#xff0c;传统的邮箱转发功能往往不能满…...

Windows更新修复完全指南:从诊断到解决的系统更新问题处理方案

Windows更新修复完全指南&#xff1a;从诊断到解决的系统更新问题处理方案 【免费下载链接】Reset-Windows-Update-Tool Troubleshooting Tool with Windows Updates (Developed in Dev-C). 项目地址: https://gitcode.com/gh_mirrors/re/Reset-Windows-Update-Tool Win…...

Z-Image-Turbo-辉夜巫女数据预处理实战:模拟VLOOKUP实现提示词与风格模板匹配

Z-Image-Turbo-辉夜巫女数据预处理实战&#xff1a;模拟VLOOKUP实现提示词与风格模板匹配 你有没有遇到过这样的烦恼&#xff1f;每次用AI画图&#xff0c;想生成一个“赛博朋克”风格的图片&#xff0c;都得重新回忆或者翻找之前写好的那一长串复杂的提示词。或者团队里每个人…...

3步突破显卡限制:如何让AMD/Intel显卡实现DLSS级画质?

3步突破显卡限制&#xff1a;如何让AMD/Intel显卡实现DLSS级画质&#xff1f; 【免费下载链接】OptiScaler OptiScaler bridges upscaling/frame gen across GPUs. Supports DLSS2/XeSS/FSR2 inputs, replaces native upscalers, enables FSR3 FG on non-FG titles. Supports N…...

小白程序员必看:大模型“语义崩塌”陷阱与收藏攻略!

本文深入解析了“语义崩塌”现象&#xff0c;即在大模型处理海量数据时&#xff0c;向量语义失去区分度导致搜索失效。以斯坦福RAG研究为例&#xff0c;揭示高维空间下“维度灾难”如何导致相关性计算失效&#xff0c;影响企业级应用。文章提出分层检索和基于图谱的检索作为解决…...

避坑指南:lidar_align标定IMU外参时,loader.cpp源码修改与运动轨迹设计的那些关键细节

避坑指南&#xff1a;lidar_align标定IMU外参的核心细节与实战优化 在自动驾驶和机器人定位领域&#xff0c;激光雷达与IMU的联合标定是系统搭建的关键环节。许多开发者在初次使用lidar_align工具时会遇到各种问题——从源码适配的困惑到标定结果的不可靠。本文将深入剖析两个最…...

Java 无人图书借阅系统设计与完整源码实现

以下是一个基于Java的无人图书借阅系统的设计与完整源码实现方案&#xff0c;涵盖系统架构、核心模块、数据库设计、关键代码实现及部署建议&#xff1a;一、系统架构设计1. 分层架构表现层&#xff1a;用户端&#xff1a;微信小程序&#xff08;UniApp开发&#xff09; H5页面…...