【QT】Day4
1> 思维导图

2> 手动完成服务器的实现,并具体程序要注释清楚
widget.h
#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QTcpServer> //服务器类
#include <QTcpSocket> //客户端类
#include <QMessageBox> //对话框类
#include <QList> //链表容器,用于存放客户端套接字
#include <QDebug> //信息调试类QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();private slots:void on_startBtn_clicked();void newConnection_slot();void readyRead_slot();private:Ui::Widget *ui;//定义服务器指针QTcpServer *server;//定义客户端容器QList<QTcpSocket*> socketList;
};
#endif // WIDGET_H
widget.cpp
#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//给服务器指针实例化空间server = new QTcpServer(this); //创建一个服务器
}Widget::~Widget()
{delete ui;
}//"启动服务器" 对应的槽函数
void Widget::on_startBtn_clicked()
{//获取ui界面上的端口号quint16 port = ui->portEdit->text().toUInt();//将服务器设置成监听状态//函数原型: bool listen(const QHostAddress &address = QHostAddress::Any, quint16 port = 0);//功能:监听客户端发来的连接请求//参数1:要监听的主机地址,Any表示监听任意主机地址,也可以给定指定主机地址//参数2:提供的端口号,如果是0:表示让系统自动分配端口号//返回值:bool,成功监听返回true,失败返回falseif(server->listen(QHostAddress::Any,port) == true){QMessageBox::information(this,"","服务器启动成功");}else{QMessageBox::information(this,"","服务器启动失败");}//此时服务器已经进入监听状态,如果有客户端发送连接请求,该服务器就会自动发射一个newConnection信号//那么我们可以将该信号连接到自定义的槽函数中处理新连接的套接字connect(server,&QTcpServer::newConnection,this,&Widget::newConnection_slot);
}//处理newConnection信号的槽函数
void Widget::newConnection_slot()
{qDebug() << "有客户端连接了";//获取最新连接的客户端套接字//函数原型: virtual QTcpSocket *nextPendingConnection();//功能:获取最新连接客户端的套接字//参数:无//返回值:套接字指针QTcpSocket *s = server->nextPendingConnection(); //获取套接字//将套接字放入到客户端容器中socketList.push_back(s); //尾插//此时,客户端与服务器已经建立起来连接,如果有客户端向服务器发来数据,客户端会自动发射一个readyRead信号//我们可以在该信号对应的槽函数中,读取客户端中的数据connect(s,&QTcpSocket::readyRead,this,&Widget::readyRead_slot);
}//关于readyRead信号对应槽函数的实现
void Widget::readyRead_slot()
{//移除无效客户端for(int i=0;i<socketList.count();i++){//函数原型: SocketState state() const;//功能:返回套接字状态//返回值:套接字状态,是个枚举值,0表示无效连接if(socketList.at(i)->state() == 0) //遍历所有客户端的状态{socketList.removeAt(i); //将下标为i的套接字从链表中移除}}//遍历客户端套接字,寻找是哪个客户端有数据待读for(int i=0;i<socketList.count();i++){//函数原型:qint64 bytesAvailable() const override;//功能:求出当前套接字中待读数据的个数//参数:无//返回值:待读数据的个数if(socketList.at(i)->bytesAvailable() != 0){//函数原型:QByteArray readAll()//功能:读取当前套接字中的数据//返回值:QByteArray读取下来的数据QByteArray msg = socketList.at(i)->readAll();//将数据展示到ui界面上ui->msgWidget->addItem(QString::fromLocal8Bit(msg));//将数据发送给所有客户端for(int j=0;j<socketList.count();j++){//将数据写入到所有客户端套接字中socketList.at(j) ->write(msg);}}}
}

相关文章:
【QT】Day4
1> 思维导图 2> 手动完成服务器的实现,并具体程序要注释清楚 widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTcpServer> //服务器类 #include <QTcpSocket> //客户端类 #include <QMessageBox> //…...
在CSDN学Golang云原生(Kubernetes Pod 有状态部署)
一,StatefulSet部署MongoDB集群 Kubernetes StatefulSet 是 Kubernetes 中的一种资源类型,它能够保证有状态服务(Stateful Service)的唯一性和顺序部署,适用于需要持久化存储、网络标识、状态管理等场景。MongoDB 是一…...
sql-从一个或多个表中向一个表中插入 多行
INSERT还可以将SELECT语句查询的结果插入到表中,此时不需要把每一条记录的值一个一个输入,只需 要使用一条INSERT语句和一条SELECT语句组成的组合语句即可快速地从一个或多个表中向一个表中插入 多行。 基本语法格式如下: INSERT INTO 目标表…...
ElementUI 实现动态表单数据校验(已解决)
文章目录 🍋前言:🍍正文1、探讨需求2、查阅相关文档([element官网](https://element.eleme.cn/#/zh-CN/component/form))官方动态增减表单项示例3、需求完美解决4、注意事项 🎃专栏分享: &#…...
Linux上定位线上CPU飙高
【模拟场景】 写一个java main函数,死循环打印 System.out.println(“111111”) , 将其打成jar包放在linux中执行 1、通过TOP命令找到CPU耗用最厉害的那个进程的PID 2、top -H -p 进程PID 找到进程下的所有线程 可以看到 pid 为 94384的线程耗用cpu …...
06-行向量列向量_向量的运算 加法,数乘,减法,转置
行向量和列向量 行向量是按行把向量排开(横着来写), 列向量是按列把向量排开(竖着来写) 在数学中我们更多的把数据写成列向量,在编程语言中更多的把数据存成行向量! 如果想在编程语言中把行向量转化成列…...
基于Matlab实现最大类间方差阈值与遗传算法的道路分割(附上完整源码+图像+程序运行说明)
道路分割是计算机视觉和图像处理中的一个重要任务,它在交通监控、自动驾驶和地图制作等领域具有广泛的应用。其中,最大类间方差阈值和遗传算法是道路分割中常用的方法之一。本文将介绍如何使用Matlab实现最大类间方差阈值与遗传算法进行道路分割。 文章目…...
13.4.2 【Linux】sudo
相对于 su 需要了解新切换的使用者密码 (常常是需要 root 的密码), sudo 的执行则仅需要自己的密码即可。sudo 可以让你以其他用户的身份执行指令 (通常是使用 root 的身份来执行指令),因此并非所有人都能够…...
电脑软件:键盘按键修改器——keytweak使用介绍
对你的电脑键盘的布局不满意、键盘上的某个按键坏掉了等等键盘问题如何解决?有了KeyTweak这一切就可以轻松解决了,KeyTweak是一个免费软件程序,使用它可让你重新映射键盘键。如果您改变主意并想将其改回原样,只需点击一下即可容易…...
软件工程学术顶会——ICSE 2023 议题(网络安全方向)清单与摘要
按语:IEEE/ACM ICSE全称International Conference on Software Engineering,是软件工程领域公认的旗舰学术会议,中国计算机学会推荐的A类国际学术会议,Core Conference Ranking A*类会议,H5指数74,Impact s…...
【Python】jupyter Linux服务器使用
文章目录 环境使用访问 环境 pip install jupyter 使用 在你想访问的目录下执行: jupyter notebook --ip0.0.0.0jupyter 给出提示: [I 2023-07-28 14:32:43.589 ServerApp] Package notebook took 0.0000s to import [I 2023-07-28 14:32:43.597 Ser…...
element 级联 父传子
html代码例子 父组件 <el-cascaderstyle"width: 100%"change"unitIdChange":options"unitOptions"filterablev-model"formInline.unitId":props"unitProps"/></el-form-item>//改变级联传值到这个组件里面<r…...
【MTI 6.S081 Lab】Copy-on-write
【MTI 6.S081 Lab】Copy-on-write The problemThe solutionImplement copy-on-write fork (hard)实验任务Hints解决方案问题解决思考uvmcopykfreekallockpagerefcow_handlertrap 虚拟内存提供了一定程度的间接性:内核可以通过将PTE标记为无效或只读来拦截内存引用&a…...
【GO】go语言入门实战 —— 命令行在线词典
文章目录 程序介绍抓包代码生成生成request body解析respond body完整代码 字节青训营基础班学习记录。 程序介绍 在运行程序的时候以命令行的形式输入要查询的单词,然后程序返回单词的音标、释义等信息。 示例如下: 抓包 我们选择与网站https://fany…...
模电模电基础知识学习笔记汇总
来源:一周搞(不)定数电模电全集,电子基础知识 11小时 一:模电学习笔记 模电主要讲述:对模拟信号进行产生、放大和处理的模拟集成电路重点知识:常用电子元器件:电阻、电容、电感、保…...
招商银行秋招攻略和考试内容详解
招商银行秋招简介 招商银行是一家股份制商业银行,银行的服务理念已经深入人心,在社会竞争愈来愈烈的今天,招商银行的招牌无疑是个香饽饽,很多人也慕名而至,纷纷向招商银行投出了简历。那么秋招银行的秋招开始时间是多…...
【Linux】四、开发工具
一、vim 编辑器(只能写代码) 1、只关注如何写代码,不会关注代码的正确性; 2、一般写代码在Windows环境下写,而vim是Linux下相对来说功能最强的编辑器; 二、vim的操作 vim ---打开vim shift键 加 ࿱…...
前后端分离实现博客系统
文章目录 博客系统前言1. 前端1.1 登陆页面1.2 博客列表页面1.3 博客详情页面1.4 博客编辑页面 2. 后端2.1 项目部署2.1.1 创建maven项目2.1.2 引入依赖2.1.3 创建目录结构2.1.4 部署程序 2.2 逻辑设计2.2.1 数据库设计2.2.2 实体类设计2.2.3 Dao层设计2.2.3.1 BlogDao 2.2.4 D…...
面试题-TS(六):TypeScript 中的泛型是什么?
面试题-TS(6):TypeScript 中的泛型是什么? 在TypeScript中,泛型(Generics)是一种强大的特性,它允许我们在编写可重用的代码时增加灵活性。泛型使得我们可以编写不特定数据类型的代码,从而提高代…...
QT DAY4
1.思维导图 2.手动完成服务器的实现,并具体程序要注释清楚 头文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTcpServer> #include <QTcpSocket> #include <QMessageBox> #include <QList> #include <QD…...
机器学习数学基础:线性代数、微积分与概率论的核心应用
1. 项目概述:为什么机器学习离不开数学?如果你刚开始接触机器学习,可能会被各种算法库和框架的易用性所迷惑,以为调调参数、跑跑模型就能解决一切问题。我刚开始也是这么想的,直到亲手实现一个简单的线性回归ÿ…...
ContextMenuManager:Windows右键菜单终极优化指南
ContextMenuManager:Windows右键菜单终极优化指南 【免费下载链接】ContextMenuManager 🖱️ 纯粹的Windows右键菜单管理程序 项目地址: https://gitcode.com/gh_mirrors/co/ContextMenuManager 我们每天都要和Windows右键菜单打交道几十次&#…...
如何快速掌握Poppins字体:免费开源的多语言设计终极指南
如何快速掌握Poppins字体:免费开源的多语言设计终极指南 【免费下载链接】Poppins Poppins, a Devanagari Latin family for Google Fonts. 项目地址: https://gitcode.com/gh_mirrors/po/Poppins 还在为多语言项目寻找完美的字体解决方案而烦恼吗ÿ…...
SVM调参实战:如何用Python的sklearn找到鸢尾花分类的最佳C值和核函数?
SVM超参数优化实战:从网格搜索到贝叶斯优化的鸢尾花分类调参指南当你在sklearn中第一次使用SVC分类器时,是否曾被默认参数C1.0和kernellinear的表现所困惑?为什么同样的算法在不同数据集上表现差异巨大?本文将带你深入SVM调参的核…...
如何永久保存微信聊天记录:WeChatMsg完整解决方案让你真正拥有数据主权
如何永久保存微信聊天记录:WeChatMsg完整解决方案让你真正拥有数据主权 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_T…...
Diablo Edit2:暗黑破坏神II全版本角色存档编辑器终极指南
Diablo Edit2:暗黑破坏神II全版本角色存档编辑器终极指南 【免费下载链接】diablo_edit Diablo II Character editor. 项目地址: https://gitcode.com/gh_mirrors/di/diablo_edit 你是否厌倦了在暗黑破坏神II中花费数百小时刷装备?是否想要尝试各…...
AI加速器安全架构:硬件级可信计算与FlexHEG技术解析
1. 前沿AI加速器的安全可信设计架构在当今AI技术快速发展的背景下,前沿AI模型的计算需求呈现指数级增长。根据行业数据,全球AI算力需求每3-4个月就会翻倍,这使得专用AI加速器成为支撑这一增长的核心基础设施。然而,随着AI模型能力…...
Kubernetes服务发现与负载均衡机制:构建高效的服务通信网络
Kubernetes服务发现与负载均衡机制:构建高效的服务通信网络 一、服务发现概述 服务发现是微服务架构中服务之间相互定位和通信的核心机制。在Kubernetes中,服务发现通过Service资源实现,它为一组Pod提供稳定的网络标识和负载均衡能力。 1.…...
QKeyMapper终极指南:免费开源按键映射工具,5分钟让你的键盘鼠标手柄随心所欲
QKeyMapper终极指南:免费开源按键映射工具,5分钟让你的键盘鼠标手柄随心所欲 【免费下载链接】QKeyMapper [按键映射工具] QKeyMapper,Qt开发Win10&Win11可用,不修改注册表、不需重新启动系统,可立即生效和停止。支…...
抖音无水印视频解析终极指南:5分钟快速上手DouYinBot
抖音无水印视频解析终极指南:5分钟快速上手DouYinBot 【免费下载链接】DouYinBot 该项目仅自用,不提供抖音视频下载 项目地址: https://gitcode.com/gh_mirrors/do/DouYinBot 在短视频创作日益普及的今天,如何快速获取抖音无水印视频、…...
