【QT】

news2024/12/26 22:22:07

通信服务端实现

widget.h文件

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QTcpServer>//服务器类
#include <QMessageBox>//消息
#include <QTcpServer>
#include <QList>
#include <QTcpSocket>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

private slots:
    void on_pushButton_2_clicked();

public slots:
    void newConnection_slot();//newConnection槽函数的声明
    void readyRead_slot();

private:
    Ui::Widget *ui;
    QTcpServer *serve;
    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)
    ,serve(new QTcpServer(this))//服务器指针实例空间
{
    ui->setupUi(this);
}

Widget::~Widget()
{
    delete ui;
}
//服务器对用槽函数
void Widget::on_pushButton_2_clicked()
{
    //获取ui界面上的端口号
    quint16 port = ui->lineEdit->text().toUInt();//将字符串转化成整形
    //监听
    //函数原型 bool listen(const QHostAddress &address = QHostAddress::Any, quint16 port = 0);
    //参数:监听的主机 监听的端口号
    if(serve->listen(QHostAddress::Any,port))//成功返回ture失败返回false
    {
        QMessageBox::information(this,"","启动服务器成功");
    }
    else
    {
        QMessageBox::information(this,"","启动服务器失败");
        return;
    }
    connect(serve,&QTcpServer::newConnection,this,&Widget::newConnection_slot);
}

void Widget::newConnection_slot()
{
    QTcpSocket *s = serve->nextPendingConnection();
    socketList.push_back(s);
    connect(s,&QTcpSocket::readyRead,this,&Widget::readyRead_slot);

}

void Widget::readyRead_slot()
{
    //遍历客户端容器,移除无效客户端
    for(int i=0;i<socketList.count();i++)
        //                   容器元素个数
    {
        //移除无效客户端
        if(socketList.at(i)->state() == 0){
            //删除该元素
            socketList.removeAt(i);
        }
    }
    //遍历客户端容器寻找哪个客户端有数据待读
    for(int i=0;i<socketList.count();i++){
        //函数功能数据的字节大小
        if(socketList.at(i)->bytesAvailable() != 0){//说明有数据
            //读取数据
            QByteArray msg = socketList.at(i)->readAll();
            //将读取到的数据放入ui界面上
            ui->ss->addItem(QString::fromLocal8Bit(msg));
            //将数据广播给所有客户端
            for(int j=0;j<socketList.count();j++){
                socketList.at(j)->write(msg);
            }
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1843050.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

室内农场种植之新型LED照明技术的研究:AS7341光谱控制器

一、功能说明 单片机采用STC8H1K17型号&#xff0c;搭载51内核&#xff0c;配备OLED显示屏&#xff0c;用于展示波长与定时时间信息。设备支持手动与定时两种操作模式&#xff0c;定时时间范围设定为5至99秒之间。用户可通过按键实现手动模式与定时模式之间的切换。 在手动模…

EOS Black灵魂回响黑色联机需要加速吗 超好用的联机加速器推荐

灵魂回响黑色是一款全新的MMORPG游戏&#xff0c;游戏在提供沉浸感超强的剧情的同时&#xff0c;也带来了压倒性的游戏画质。同时&#xff0c;游戏的职业系统十分自由&#xff0c;从人物属性到装备属性、到技能搭配、甚至到职业都可以任意DIY&#xff0c;把角色养成发挥到了极致…

本地大模型服务 Ollama:从安装到使用

文章目录 前言一、下载安装1.1 官网安装1.2 压缩包安装1.3 docker 安装二、命令行使用2.1 常用命令2.2 模型列表2.3 使用三、Open-WebUI3.1 安装3.2 修改语言3.3 使用参考前言 Ollama 是专为在本地机器上便捷部署和运行大型语言模型(LLM)而设计的开源框架,它有如下几个特点…

【Kafka】Kafka生产者数据重复、数据有序、数据乱序-07

【Kafka】Kafka生产者数据重复、数据有序、数据乱序-07 1. 数据重复1.1 数据传递语义1.2 幂等性1.2.1 如何开启幂等性1.2.2 同一个消息&#xff0c;多个分区都会存在吗&#xff1f; 1.3 事务1.3.1 Kafka 事务原理1.3.2 Kafka事务的作用和意义作用具体应用场景 2. 数据有序3. 数…

LogicFlow 学习笔记——10. LogicFlow 进阶 边

我们可以基于 Vue 组件自定义边&#xff0c;可以在边上添加任何想要的 Vue 组件&#xff0c;甚至将原有的边通过样式隐藏&#xff0c;重新绘制。 如 Example3 中所示&#xff1a; 锚点 默认情况下&#xff0c;LogicFlow 只记录节点与节点的信息。但是在一些业务场景下&#…

易兆微电子_嵌入式软件工程师笔试题

易先电子 嵌入式软件工程师笔试题(十七) 1.关键字 extern是什么含义, 请举例说明。 修饰符extern用在变量或者函数的声明前&#xff0c;用来说明 “ 此变量 / 函数是在别处定义的&#xff0c;要在此处引用 ”。 //main.c #include <stdio.h>int main() {extern int num…

HTML播放flv

页面效果&#xff1a; 代码如下&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" …

Object类hashCode方法和equals方法源码

hashCode方法 顶级类Object里面的方法&#xff0c;所有类都是继承Object的&#xff0c;返回值int类型 根据一定的hash规则&#xff08;存储地址、字段、或者长度等&#xff09;&#xff0c;映射成一个数值&#xff0c;即散列值 public static int hashCode(Object a[]) {if (a…

windows系统下安装redis,并进行密码配置

一、windows系统下安装redis Redis&#xff08;Remote Dictionary Server &#xff0c;远程字典服务&#xff09; 是一个高性能的key-value数据格式的内存数据库&#xff0c;是NoSQL数据库。redis的出现主要是为了替代早起的Memcache缓存系统的。 内存型(数据存放在内存中)的非…

MPI并行计算关键点讲解及使用入门

MPI&#xff08;Message Passing Interface&#xff09;是并行计算领域的一个关键标准&#xff0c;它定义了一套用于在多个计算节点间进行高效消息传递和数据交换的通信协议和库。在高性能计算&#xff08;HPC&#xff09;领域&#xff0c;MPI尤为重要&#xff0c;特别是在处理…

Nuxt3 实战 (十一):添加路由 Transition 过渡效果和 Loading 动画

页面过渡效果 Nuxt3 利用 Vue 的 组件 在页面和布局之间应用过渡效果。 nuxt.config.ts 文件配置&#xff1a; export default defineNuxtConfig({app: {pageTransition: { name: page, mode: out-in }}, })在页面之间添加过渡效果&#xff0c;在 app.vue 文件中添加以下 CS…

opencv 打开图片后,cv::mat存入共享内存的代码,实现消费者与生产者模型。XSI信号量和POSIX 信号量

文章目录 基于 sys 系统信号量(XSI信号量)常用api参考 基于 POSIX 信号量有名信号量常用 api 无名信号量常用 api 参考 实践-基于POSIX有名信号量生产者消费者模型任务说明同步关系互斥关系 设置一个互斥信号量&#xff0c;实现对共享内存的互斥访问设置两个信号量&#xff0c;…

ESP32 矩阵键盘 4*3状态机

简洁高效的ESP32处理矩阵键盘代码… /**********矩阵键盘IO映射***************3(9) 1(8) 5(4)2(13)7(12)6(18)4(19)*************************************/ uint8_t Trg0,Cont0; void Key_Task(void) {uint8_t ReadData,ColumnData,RowData;pinMode(9,INPUT_PULLUP);pin…

[面试题]RabbitMQ

[面试题]Java【基础】[面试题]Java【虚拟机】[面试题]Java【并发】[面试题]Java【集合】[面试题]MySQL[面试题]Maven[面试题]Spring Boot[面试题]Spring Cloud[面试题]Spring MVC[面试题]Spring[面试题]MyBatis[面试题]Nginx[面试题]缓存[面试题]Redis[面试题]消息队列[面试题]…

候选键的确定方法-如何判断属性集U的子集K是否为候选键、如何找到关系模式的候选键

一、候选键的定义 在关系模式R(U,F)中&#xff0c;若&#xff0c;且K满足&#xff0c;则K为关系模式R的候选键 关系模式R的候选键必须满足以下两个条件&#xff1a; &#xff08;1&#xff09;必须是属性集U的子集 &#xff08;2&#xff09;完全函数决定属性集U 二、如何…

使用opencv合并两个图像

本节的目的 linear blending&#xff08;线性混合&#xff09;使用**addWeighted()**来添加两个图像 原理 (其实我也没太懂&#xff0c;留个坑&#xff0c;感觉本科的时候线代没学好。不对&#xff0c;我本科就没学线代。) 源码分析 源码链接 #include "opencv2/imgc…

工控 UI 风格美轮美奂

工控 UI 风格美轮美奂

Docker 部署项目,真的太雅了~

大家好&#xff0c;我是南城余&#xff01; 最近在找工作&#xff0c;正好手里有台服务器&#xff0c;之前项目上线用的宝塔部署项目上线&#xff0c;在公司实习了一年后&#xff0c;发现如今项目部署都使用的是容器化部署方案&#xff0c;也就是类似于和 Docker 一样的部署方案…

PFC 离散元数值模拟仿真技术与应用

近几年&#xff0c;随着计算能力的提高和算法的优化&#xff0c;离散元仿真技术得到了快速发展&#xff0c;并在学术界产生了大量研究成果。在 PFC 离散元计算中无需给定材料的宏观本构关系和对应的参数&#xff0c;这些传统的参数和力学特性在程序中可以自动得到。据调查&…

【绝对有用】刚刚开通的GPT-4o计算这种数学题目出现问题了

欢迎关注如何解决以上问题的方法&#xff1a;查看个人简介中的链接的具体解决方案