qt事件和连接TCP协议

QT网络聊天室服务器实现

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
    ,server(new QTcpServer(this))//给服务器指针实例化一个空间
{
    ui->setupUi(this);
}

Widget::~Widget()
{
    delete ui;
}

void Widget::on_start_btn_clicked()
{
    //    获取UI界面上的端口号
    quint16 port =  ui->port_edit->text().toUInt();//将字符串转成整型
    //    函数原型 参数1:监听的主机 参数2监听的端口号
    //    bool listen(const QHostAddress &address = QHostAddress::Any, quint16 port = 0);
    //    让服务器设置监听
    if( server->listen(QHostAddress::Any, port) ){
        QMessageBox::information(this,"","启动服务器成功!");
    }else{
        QMessageBox::information(this,"","启动服务器失败!");
        return;
    }
    //    服务器已经设置好监听,如果有客户端发来连接,服务器端会自动发射newconnection信号
    connect(server, &QTcpServer::newConnection, this, &Widget::newConnection_slot);//newConnection连接到newConnection_slot槽函数
}

//newConnection槽函数声明
void Widget::newConnection_slot()
{
    // 函数原型:virtual QTcpSocket *nextPendingConnection();
    // 使用nextpadding获取最新连接客户端套接字
    QTcpSocket *s = server->nextPendingConnection();
    //    将客户端放入容器中
    socketList.push_back(s);
    //    如果有客户端向服务器发来数据,客户端就会自动发送一个readyread信号,就可以将该信号连接到自定义槽函数中读取数据
    connect(s, &QTcpSocket::readyRead, this, &Widget::readyRead_slot);//readyRead信号连接到readyRead_slot槽函数
}

void Widget::readyRead_slot()
{
    //遍历客户端容器,移除无效客户端
    for( int i=0; i<socketList.count(); i++){ //count是容器的元素个数
        //判断连接状态 SocketState.UnconnectedState 
//        enum SocketState {
//            UnconnectedState,0
//            HostLookupState,1
//            ConnectingState,2
//            ConnectedState,3
//            BoundState,4
//            ListeningState,5
//            ClosingState
//        };
        if( socketList.at(i)->state() == 0 ){
            // 删除该元素
            socketList.removeAt(i);
        }
    }
    // 寻找哪个客户端有数据待读
    for(int i=0;i<socketList.count(); i++){

        if( socketList.at(i)->bytesAvailable()!= 0 ){ //当前socketList的字节数不为0,代表有数据
            // 读取数据
            QByteArray msg = socketList.at(i)->readAll();
            // 将读取到的数据,放入到UI界面上
            ui->listWidget->addItem(QString::fromLocal8Bit(msg));
            //  将数据广播给所有客户端
            for(int j=0;j<socketList.count(); j++){
                socketList.at(j)->write(msg);
            }
        }
    }
}

qt事件和连接TCP协议

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

⭐最新版!SpringBoot正确集成PageHelper姿势,不再被误导!

GGBond&#x1f508; CSDN的朋友们大家好哇&#xff0c;我是新来的Java练习生 CodeCodeBond&#xff01; 什么是PageHelper&#xff1f; 这里给不知道的人儿说明一下~~ 知道的xdm可以跳过了&#xff01; PageHelper顾名思义是一个 页面 帮手。也就是分页查询的一个好用的工具…

vue3前后端开发:响应式对象不能直接成为前后端数据传输的对象

如图所示&#xff1a;前端控制台打印显示数据是没问题的&#xff0c;后端却显示没有接收到相应数据&#xff0c;但是后端的确接收到了一组空数据 直接说原因&#xff1a;这种情况唯一的原因是没有按正确格式传递参数。每个人写错的格式各有不同&#xff0c;我只是说明一下我在…

绝望中迎来曙光,阿里大模型算法岗 Offer 突然来了!

节前&#xff0c;我们组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、今年参加社招和校招面试的同学。 针对大模型技术趋势、算法项目落地经验分享、新手如何入门算法岗、该如何准备面试攻略、面试常考点等热门话题进行了深入的讨论。 总结链接如…

3 话题通信-API的使用

目录 (一)常用API 1 初始化 1.1 初始化函数(c++) (1)函数一般表达式: (2)使用 (3)举例(c++) 案例1:argc与argv使用 要求 cmakelists.txt配置 代码 效果图 案例2:options的使用 要求 cmakelists.txt配置 代码 效果图 1.2 初始化函数(python) (…

label studio数据标注平台的自动化标注使用

&#xff08;作者&#xff1a;陈玓玏&#xff09; 开源项目&#xff0c;欢迎star哦&#xff0c;https://github.com/tencentmusic/cube-studio 做图文音项目过程中&#xff0c;我们通常会需要进行数据标注。label studio是一个比较好上手的标注平台&#xff0c;可以直接搜…

【Unity小技巧】记一个RenderTexture无法正确输出Camera视图下的Depth渲染的问题

问题 这个问题出现在使用URP管线时&#xff0c;我试图用Shader实现血条的制作&#xff0c;并用RenderTexture将视图渲染到RawImage上。 但是渲染结果出现了问题&#xff1a; 可以看到液体边缘的渲染出现了错误&#xff0c;原因不明 在StackFlow上查找后找到了类似的问题&…

轻松掌握:工科生如何高效阅读国际期刊和撰写论文(上)

⭐️我叫忆_恒心&#xff0c;一名喜欢书写博客的研究生&#x1f468;‍&#x1f393;。 如果觉得本文能帮到您&#xff0c;麻烦点个赞&#x1f44d;呗&#xff01; 近期会不断在专栏里进行更新讲解博客~~~ 有什么问题的小伙伴 欢迎留言提问欧&#xff0c;喜欢的小伙伴给个三连支…

基于 MHA 的 MySQL 高可用主从架构

Author&#xff1a;Arsen Date&#xff1a;2024/06/25 目录 一、前言1.1 概述1.2 组件1.3 流程 二、环境三、部署3.1 基本环境3.1.1 hosts 配置3.1.2 配置 SSH 免密访问 3.2 MySQL 主从3.2.1 基础环境配置3.2.2 启动 MySQL 实例3.2.3 配置 MySQL 主从3.2.4 MySQL 主从同步验证 …

耐盐雾抗腐蚀航空插头插座

航空插头插座概述 耐盐雾720小时航空插头插座是一种专门设计用于抵抗盐雾侵蚀的航空用连接器&#xff0c;广泛应用于航空航天、海洋工程和其他需要高防护级别的领域。这类插头插座不仅具备一般的电气连接功能&#xff0c;还能在含盐较高的环境中长时间工作而不被腐蚀&#xff…

Linux 标准IO的fopen和fclose

getchar(),putchar() ‐‐‐‐ 一个字符 gets(buf),puts(buf) ‐‐‐‐ 一串字符 scanf(),printf() ‐‐‐‐ 一个字符&#xff0c;一串字符都可以 fopen函数的形式 FILE * fopen(constchar *path , cost char *mode) /* * description : 打开一个文件 * param ‐ path…

Prometheus:开源监控解决方案的力量

前言 在当今高度数字化和云原生应用的时代&#xff0c;监控系统是确保系统稳定性和性能的关键组成部分。而 Prometheus 作为一种开源的监控解决方案&#xff0c;正在成为越来越多企业和开发者的首选。本文将深入探讨 Prometheus 的特性、优势以及如何利用它来构建强大的监控系…

圈复杂度.

圈复杂度是衡量代码的重要标准 配置&#xff1a; eslint里面&#xff1a;rules&#xff1a;complexity&#xff1a;[error,10]

第28课 绘制原理图——绘制导线

概述 放置完元器件之后&#xff0c;接着就要用导线将元器件的管脚一个一个连起来了。 绘制导线的方法 点击快速工具条上的“线”命令&#xff0c;进入绘制导线的过程。 点击选择某个管脚或电源端口&#xff0c;作为导线的起始端。 再点击选择另一个管脚或电源端口&#xff0c…

为什么永远不会有语言取代 C/C++?

每个 CPU 都带有一种称为 ISA&#xff08;指令集架构&#xff09;汇编的电路语言。ISA 程序集是一种硬件语言&#xff0c;由基本数据操作、数学计算和结构化编程&#xff08;即 jmp&#xff09;的操作组成。但是&#xff0c;为每个计算需求编写汇编代码无疑是耗时的&#xff0c…

(六)使用统计学方法进行变量有效性测试(43道选择题)

本文整理了使用统计学方法进行变量有效性测试相关的练习题&#xff0c;共43道&#xff0c;适用于想巩固理论基础的同学。来源&#xff1a;如荷学数据科学题库&#xff08;CDA二级-第7章&#xff09;。 1&#xff09; 2&#xff09; 3&#xff09; 4&#xff09; 5&#xff09;…

pinia.js报patchToApply.hasOwnProperty is not a function

vue3 ts pinia.js 先看报错> patchToApply.hasOwnProperty is not a function 错误信息&#xff1a; pinia.js?v91704efd:913 Uncaught (in promise) TypeError: patchToApply.hasOwnProperty is not a functionat mergeReactiveObjects (pinia.js?v91704efd:913:23)…

YOLOv5改进(七)--改进损失函数EIoU、Alpha-IoU、SIoU、Focal-EIOU

文章目录 1、前言2、损失函数代码实现2.1、修改metrics.py2.2、修改loss.py 3、替换EIOU4、替换SIoU5、替换Alpha-IoU6、替换Focal-EIOU7、目标检测系列文章 1、前言 YOLOv5默认使用损失函数为CIoU&#xff0c;本文主要针对损失函数进行修改&#xff0c;主要将bbox_iou函数进行…

昇思25天学习打卡营第2天|onereal》

今天学习内容是了解华为昇思平台。虽然打了卡&#xff0c;但是我的jupyter里面并没有播放按钮&#xff0c;所以还是无法运行代码。反映给昇思吴彦祖小哥了&#xff0c;他说需要专家帮我解决。 我还是要自我表扬一下&#xff0c;不懂就问&#xff0c;切莫不懂装懂&#xff0c;那…

充电宝哪个牌子最好最耐用?耐用西圣、罗马仕、绿联充电宝实测

目前充电宝是我们出行必备的“能量伴侣”。然而&#xff0c;市面上充电宝品牌繁多&#xff0c;让人眼花缭乱&#xff0c;究竟哪个牌子最好最耐用呢&#xff1f;为了给大家找到答案&#xff0c;我们精心挑选了西圣、罗马仕和绿联这三个备受关注的品牌&#xff0c;并对它们的充电…

clion调试opencv程序时,查看内存中图像的方法

很久之前在windows上使用 visual studio中 Image Watch插件查看内存中图像感觉很方便&#xff0c;后来转到liunx上开发后&#xff0c;在clion上一直没有找到对应的插件。之前看到过qtOpenImageDebugger好像有类似功能&#xff0c;vs code好像也可以&#xff0c;但是没有配置。 …