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协议

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python Django安装及怎么检测是否安装成功

一、winr 输入cmd 进入控制台。输入pip install Django5.0.1 二、如果安装过程没有问题。就进行下一步进行检查是否成功安装。 三、 1.在控制台输入python&#xff0c;进入python环境 2.输入 import django 3.继续输入 django.get_version()。显示版本号表示成功安装。

MySQL8,Navicat能登陆成功,密码却忘记了

执行成功的图&#xff1a; 以下为步骤&#xff1a;本文一共8个简单步骤。 环境&#xff1a;mysql8、window10、navicat11 1、打开本地电脑window10的命令窗&#xff08;俗称黑窗口&#xff09;&#xff0c;windowR 2、输入regegit&#xff0c;回车&#xff0c;打开注册表 3、…

揭开AI大模型的神秘面纱:一文看懂GPT-4的核心技术

近年来&#xff0c;人工智能&#xff08;AI&#xff09;技术迅猛发展&#xff0c;特别是AI大模型的崛起&#xff0c;给人们的生活和工作带来了深远的影响。作为其中的佼佼者&#xff0c;GPT-4备受瞩目。那么&#xff0c;GPT-4的核心技术究竟是什么&#xff1f;它是如何运作的&a…

win10远程桌面端口,win10操作系统怎么修改远程桌面端口和共享端口号

在Win10操作系统中&#xff0c;远程桌面端口和共享端口号的修改是两项重要的网络配置任务&#xff0c;它们对于提升系统的安全性和灵活性具有重要意义。以下将分别介绍如何在Win10中修改这两个端口号。 一、Win10操作系统远程桌面端口的修改 远程桌面端口的修改主要涉及到注册…

【毕业设计】Django 校园二手交易平台(有源码+mysql数据)

此项目有完整实现源码&#xff0c;有需要请联系博主 Django 校园二手交易平台开发项目 项目选择动机 本项目旨在开发一个基于Django的校园二手交易平台&#xff0c;为大学生提供一个安全便捷的二手物品买卖平台。该平台将提供用户注册和认证、物品发布和搜索、交易信息管理等…

【C++高阶】高效搜索的秘密:深入解析搜索二叉树

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ ⏩收录专栏⏪&#xff1a;C “ 登神长阶 ” &#x1f921;往期回顾&#x1f921;&#xff1a;C多态 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀二叉搜索树 &#x1f4d2;1. 二叉搜索树&…

Java——构造器(构造方法)和 this

一、什么是构造器 构造器&#xff08;Constructor&#xff09;是Java类的一种特殊方法&#xff0c;用于初始化对象的状态。构造器在创建对象时被调用&#xff0c;可以对对象的成员变量进行初始化。 我之前的文章《Java——类和对象-CSDN博客》中也提到了构造器。 二、构造器…

银行数仓项目实战(四)--了解银行业务(存款)

文章目录 项目准备存款活期定期整存整取零存整取存本取息教育储蓄定活两便通知存款 对公存款对公账户协议存款 利率 项目准备 &#xff08;贴源层不必写到项目文档&#xff0c;因为没啥操作没啥技术&#xff0c;只是数据。&#xff09; 可以看到&#xff0c;银行的贴源层并不紧…

【两数之和】

两数之和 一、题目二、暴力解法三、哈希表四、map字典1.基本方法.set()添加键值对.get()通过键获取值.has()判断map是否有这个键 2.map和set的联系和区别共同点共同点MapSet 一、题目 二、暴力解法 三、哈希表 解题思路&#xff1a;将nums的元素依次以键值对的方式存储在map字典…

java 线程之间通信-volatile 和 synchronized

你好&#xff0c;我是 shengjk1&#xff0c;多年大厂经验&#xff0c;努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注&#xff01;你会有如下收益&#xff1a; 了解大厂经验拥有和大厂相匹配的技术等 希望看什么&#xff0c;评论或者私信告诉我&#xff01; 文章目录 一…

python学习笔记-08

面向对象基础(OOP)-上 1. 面向对象概述 面向过程&#xff1a;根据业务逻辑从上到下写代码 函数式&#xff1a;将某功能代码封装到函数中&#xff0c;日后便无需重复编写&#xff0c;仅调用函数即可 面向对象(object oriented programming)&#xff1a;将数据与函数绑定到一起…

通过Vue3+高德地图的JS API实现市区地图渲染

效果图1: 核心代码1: <script setup>import { onMounted, onUnmounted } from vue;import AMapLoader from @amap/amap-jsapi-loader;import { message } from ant-design-vue;import school from @/assets/icons/school.svg;import enterprise from @/assets/icons/e…

laravel版本≥ 8.1

laravel10 php ≥ 8.1 且 ≤ 8.3&#xff1f; 8.1 < php < 8.3PHP版本要求在 8.1 到 8.3 之间&#xff0c;包括这两个版本。具体来说&#xff1a;"≥ 8.1" 表示 PHP 的版本至少是 8.1&#xff0c;也就是说 8.1 及以上的版本都可以。 "≤ 8.3" 表示 P…

3dmax怎么渲染又快又清晰?

在3ds Max中&#xff0c;追求快速且清晰的渲染效果是每个设计师的目标。云渲染技术的出现&#xff0c;为这一目标提供了强大的支持。通过云渲染&#xff0c;设计师能够利用远程服务器的强大计算能力&#xff0c;实现快速渲染&#xff0c;同时保持图像的高清晰度。 一、3dmax怎么…

C++ 75 之 异常的传递

#include <iostream> #include <string> using namespace std;// 1.自己准备好一个类&#xff0c;写自己要打印的内容 class MyException{ public:void printE(){cout << "我自己写的异常" << endl;} };class Students02{ public:Students02…

若依 ruoyi 显示隐藏搜索框 显示隐藏列

一、 显示隐藏搜索框 页面搜索关键字 showSearch&#xff0c;设置是否显示 隐藏&#xff1a; 显示&#xff1a; 二、自定义设置 显示隐藏列 1. 页面搜索关键字 right-toolbar&#xff0c;新增&#xff1a; :columns"columns" 2. js下 data(){return{}}中新增&am…

js语法---理解反射Reflect对象和代理Proxy对象

Reflect 基本要点 反射&#xff1a;reflect是一个内置的全局对象&#xff0c;它的作用就是提供了一些对象实例的拦截方法&#xff0c;它的用法和Math对象相似&#xff0c;都只有静态方法和属性&#xff0c;同时reflect也没有构造器&#xff0c;无法通过new运算符构建实例对象&…

WinRAR应用文件图标是白色怎么解决

1.打开程序-选项-设置 2.找到集成-选择全部切换&#xff0c;保存即可。

Mobvista汇量科技解析奥运机会点及营销理念,看广告投放如何抢占先机

四年一度的奥运盛会&#xff0c;作为少有能跨越文化、宗教、种族、行为等各方面差异的体育事件&#xff0c;更能广泛吸引全球观众的目光&#xff0c;成为品牌方和广告主天然的流量磁铁。应用增长平台Mobvista汇量科技为助力各行业开发者、各品牌商家抢占奥运流量&#xff0c;分…

【CT】LeetCode手撕—141. 环形链表

目录 题目1- 思路2- 实现⭐141. 环形链表——题解思路 3- ACM实现 题目 原题连接&#xff1a;141. 环形链表 1- 思路 模式识别 模式1&#xff1a;判断链表的环 ——> 快慢指针 思路 快指针 ——> 走两步慢指针 ——> 走一步判断环&#xff1a;若快慢相遇则有环&a…