Qt中的QTcpSocket、QWebSocket和QLocalSocket

同时实现了QTcpSocket、QWebSocket和QLocalSocket的简单通讯deamon,支持自动获取本机ip,多个客户端交互。在这个基础上你可以自己加错误检测、心跳发送、包封装解析和客户端自动重连等功能。
获取本机电脑ip:
QString Widget::getIp()
{QString hostName=QHostInfo::localHostName();//主机信息查询:返回本机主机名QHostInfo hostInfo=QHostInfo::fromName(hostName);//通过主机名称,获取IP地址,返回一个hostInfo类QString localIP="";//本地IP地址string数组QList<QHostAddress> addList=hostInfo.addresses();//创建一个QList对象,容器内部存储QHostAddress类型的数据,返回一个address数组,QHostAddress类提供一个IP地址的信息,包括IPv4和Ipvif (!addList.isEmpty()){for (int i=0;i<addList.count();i++){QHostAddress aHost=addList.at(i);//访问指定位置的元素//测试//qDebug()<<aHost.toString();if (QAbstractSocket::IPv4Protocol==aHost.protocol()) //protocol()返回IP地址的协议类型,并且只返回IPv4的地址{localIP=aHost.toString();//返回IP地址的字符串break;}}}qDebug()<<localIP;return localIP;
}
tcp服务器连接介绍:
1、定义并创建接收的信号与槽:
//创建tcp服务器对象
m_tcpServer = new QTcpServer(this);
//捕获客户端连接
connect(m_tcpServer,SIGNAL(newConnection()),this,SLOT(slottcpNewConnection()));
2、开启监听ip和端口
m_tcpServer->listen(QHostAddress(ui->tcpip->text()),ui->tcpport->text().toInt());
3、接入连接进来的客户端,并配置接收。
//获取新的连接对象QTcpSocket *tcpSocket = m_tcpServer->nextPendingConnection();//捕获客户端发送数据的信号connect(tcpSocket,&QTcpSocket::readyRead,this,[&](){QTcpSocket* socket = qobject_cast<QTcpSocket*>(sender());QString val = socket->readAll();});//捕获客户端断开的信号connect(tcpSocket,&QTcpSocket::disconnected,this,[=](){});
}
4、发送数据
tcpSocket->write(ui->tcpsendedit->text().toLatin1());
tcp客户端连接流程
1、定义并连接ip和端口
m_tcpSocket = new QTcpSocket(this);m_tcpSocket->connectToHost(QHostAddress(ui->tcpip->text()),ui->tcpport->text().toInt());
2、绑定连接、断开连接和接收的信号与槽
connect(m_tcpSocket,&QTcpSocket::connected,this,[=](){});connect(m_tcpSocket,&QTcpSocket::disconnected,this,[=](){});connect(m_tcpSocket,&QTcpSocket::readyRead,this,&Widget::slotTcpReadData);
3、发送
m_tcpSocket->write(ui->tcpsendedit->text().toLatin1());
websocket服务器连接流程
1、定义并创建接收的信号与槽:
//使用给定的serverName构造一个新的QWebSocketServer。该服务器名称将在HTTP握手阶段被用来识别服务器。它可以为空,此时不会将服务器名称发送给客户端。//SslMode指示服务器是通过wss(SecureMode)还是ws(NonSecureMode)运行。QWebSocketServer::SecureMode服务器以安全模式运行(通过wss);QWebSocketServer::NonSecureMode服务器以非安全模式运行(通过ws)m_webServer = new QWebSocketServer("",QWebSocketServer::NonSecureMode,this);connect(m_webServer,SIGNAL(newConnection()),this,SLOT(slotWebNewConnect()));
2、开启监听ip和端口
m_webServer->listen(QHostAddress(ui->webip->text()),ui->webport->text().toInt());
3、接入连接进来的客户端,并配置接收。
QWebSocket* webSocket = m_webServer->nextPendingConnection();connect(webSocket,&QWebSocket::disconnected,this,[=](){});connect(webSocket,&QWebSocket::textMessageReceived,this,[=](QString val){});
4、发送数据
webSocket>sendTextMessage(ui->websendedit->text());//sendBinaryMessage发送二进制数据。
websocket客户端连接流程
1、定义并连接ip和端口
m_webSocket = new QWebSocket("");m_webSocket->open(QUrl(QString("ws://%1:%2").arg(ui->webip->text()).arg(ui->webport->text())));
2、绑定连接、断开连接和接收的信号与槽
connect(m_webSocket,&QWebSocket::connected,this,[=](){});connect(m_webSocket,&QWebSocket::disconnected,this,[=](){});connect(m_webSocket,&QWebSocket::textMessageReceived,this,&Widget::slotwebReadData);
3、发送
m_webSocket->sendTextMessage(ui->websendedit->text());//sendBinaryMessage发送二进制数据。
本地通信服务器连接流程
1、定义并创建接收的信号与槽:
//创建本地服务器对象m_localServer = new QLocalServer(this);//捕获客户端连接connect(m_localServer,SIGNAL(newConnection()),this,SLOT(slotlocalnewConnection()));
2、开启监听key值
QLocalServer::removeServer(m_oldKey); //删除已有的连接m_localServer->listen(ui->localkey->text()); //监听客户端m_oldKey = ui->localkey->text();
3、接入连接进来的客户端,并配置接收。
if (m_localServer->hasPendingConnections()){//获取新的连接对象QLocalSocket* localSocket = m_localServer->nextPendingConnection();//捕获客户端发送数据的信号connect(localSocket,&QLocalSocket::readyRead,this,[&](){QLocalSocket* socket = qobject_cast<QLocalSocket*>(sender());QString val = socket->readAll();});//捕获客户端断开的信号connect(localSocket,&QLocalSocket::disconnected,this,[=](){});}
4、发送
localSocket->write(ui->tcpsendedit->text().toLatin1());
本地通信客户端连接流程
1、定义并连接key值
m_localSocket = new QLocalSocket(this);m_localSocket->connectToServer(ui->localkey->text(),QIODevice::ReadWrite);
2、绑定连接、断开连接和接收的信号与槽
connect(m_localSocket,&QLocalSocket::connected,this,[=](){});connect(m_localSocket,&QLocalSocket::disconnected,this,[=](){});connect(m_localSocket,&QLocalSocket::readyRead,this,&Widget::slotlocalReadData);
3、发送
m_localSocket->write(ui->localsendedit->text().toLatin1());
完整示例代码
相关文章:
Qt中的QTcpSocket、QWebSocket和QLocalSocket
同时实现了QTcpSocket、QWebSocket和QLocalSocket的简单通讯deamon,支持自动获取本机ip,多个客户端交互。在这个基础上你可以自己加错误检测、心跳发送、包封装解析和客户端自动重连等功能。 获取本机电脑ip: QString Widget::getIp() {QSt…...
枚举学习贴
1. 概述 1.1 是什么 枚举对应英文(enumeration, 简写 enum)枚举是一组常量的集合。可以这里理解:枚举属于一种特殊的类,里面只包含一组有限的特定的对象 1.2 枚举的二种实现方式 自定义类实现枚举使用 enum 关键字实现枚举 1.3 什么时候用 存在有限…...
【C++】30h速成C++从入门到精通(继承)
继承的概念及定义继承的概念继承(inheritance)机制是面向对象程序设计使代码可以复用的重要手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序…...
Java多线程还不会的进来吧,为你量身打造
💗推荐阅读文章💗 🌸JavaSE系列🌸👉1️⃣《JavaSE系列教程》🌺MySQL系列🌺👉2️⃣《MySQL系列教程》🍀JavaWeb系列🍀👉3️⃣《JavaWeb系列教程》…...
8 神经网络及Python实现
1 人工神经网络的历史 1.1 生物模型 1943年,心理学家W.S.McCulloch和数理逻辑学家W.Pitts基于神经元的生理特征,建立了单个神经元的数学模型(MP模型)。 1.2 数学模型 ykφ(∑i1mωkixibk)φ(WkTXb)y_{k}\varphi\left(\sum_{i1…...
使用QIS(Quantum Image Sensor)图像重建总结(1)
最近看了不少使用QIS重建图像的文章,觉得比较完整详细的还是Abhiram Gnanasambandam的博士论文:https://hammer.purdue.edu/articles/thesis/Computer_vision_at_low_light/20057081 1 介绍 讲述了又墨子的小孔成像原理,到交卷相机…...
【SpringCloud】SpringCloud教程之Nacos实战(二)
目录前言一.Nacos实现配置管理二.Nacos拉取配置三.Nacos配置热更新(自动刷新,不需要重启服务)1.在有Value注入变量所在类添加注解2.新建类用于属性加载和配置热更新四.Nacos多环境配置共享1.多环境共享配置2.配置的加载优先级测试3.配置优先级前言 Nacos实战一&…...
利用Qemu工具仿真ARM64平台
Windows系统利用Qemu仿真ARM64平台0 写在最前1 Windows安装Qemu1.1 下载Qemu1.2 安装Qemu1.3 添加环境变量1.4测试安装是否成功2. Qemu安装Ubuntu-Server-Arm-642.1 安装前的准备2.2 安装Ubuntu server arm 64位镜像3 Windows配置Qemu网络和传输文件3.1 参考内容3.2 Windows安装…...
【Hello Linux】进程控制 (内含思维导图)
作者:小萌新 专栏:Linux 作者简介:大二学生 希望能和大家一起进步! 本篇博客简介:简单介绍下进程的控制 包括进程启动 进程终止 进程等待 进程替换等概念 进程控制介绍进程创建fork函数fork函数的返回值fork函数的使用…...
嵌入式linux物联网毕业设计项目智能语音识别基于stm32mp157开发板
stm32mp157开发板FS-MP1A是华清远见自主研发的一款高品质、高性价比的Linux单片机二合一的嵌入式教学级开发板。开发板搭载ST的STM32MP157高性能微处理器,集成2个Cortex-A7核和1个Cortex-M4 核,A7核上可以跑Linux操作系统,M4核上可以跑FreeRT…...
【黄河流域公安院校网络空间安全技能挑战赛】部分wp
文章目录webbabyPHPfunnyPHPEzphp**遍历文件目录的类**1、DirectoryIterator:2、FilesystemIterator:3、**Globlterator**读取文件内容的类:SplFileObjectMisc套娃web babyPHP <?php highlight_file(__FILE__); error_reporting(0);$num $_GET[nu…...
五点CRM系统核心功能是什么
很多企业已经把CRM客户管理系统纳入信息化建设首选,用于提升核心竞争力,改善企业市场、销售、服务、渠道和客户管理等几个方面,并进行创新或转型。CRM系统战略的五个关键要点是:挖掘潜在客户、评估和培育、跟进并成交、分析并提高…...
window.print() 前端实现网页打印详解
目录 前言 一、print()方法 二、打印样式 2.1使用打印样式表 2.2使用媒介查询 2.3内联样式使用media属性 2.4在css中使用import引入打印样式表 三、打印指定区域部分内容 3.1方法一 3.2方法二 3.3方法三 四、强制插入分页 4.1page-break-before(指定元素前…...
php程序员应具有的7种能力
php程序员应具有什么样的能力,才能更好的完成工作,才会有更好的发展方向呢?在中国我想您不会写一辈子代码的,那样不可能,过了黄金期,您又怎么办呢?看了本文后,希望对您有所帮助。 一…...
quarkus 生产环境与k8s集成总结
quarkus 生产环境与k8s集成总结 大纲 基础准备quarkus2.13.7脚手架工程配置GraalVM-java11 安装配置配置maven3.8.7linux环境下云原生二进制文件打包环境搭建编译运行quarkus二进制文件quarkus二进制文件制作为docker镜像并运行使用k8s部署quarkus二进制文件 基础准备 生产…...
蓝桥杯训练day2
day21.二分(1)789. 数的范围(2)四平方和(1)哈希表做法(2)二分做法(3)1227. 分巧克力(4)113. 特殊排序(5)1460. 我在哪?2.双指针(1)1238. 日志统计(2)1240. 完全二叉树的权值(3&#…...
为什么99%的程序员都做不好SQL优化?
连接层 最上层是一些客户端和链接服务,包含本地sock 通信和大多数基于客户端/服务端工具实现的类似于 TCP/IP的通信。主要完成一些类似于连接处理、授权认证、及相关的安全方案。在该层上引入了线程 池的概念,为通过认证安全接入的客户端提供线程。同样…...
Jenkins最新版安装调试
清理旧的jenkins: find / -name jenkins* 一项一项的清理:rm -rf /var/log/jenkins* 下载最新版jenkins镜像:jenkins-redhat-stable安装包下载_开源镜像站-阿里云 上传到服务器: 安装命令: yum install -y jenkins…...
简略说一下go的sync.RWMutex锁
在简略的说之前,首先要对RW锁的结构有一个大致的了解 type RWMutex struct {w Mutex // 写锁互斥锁,只锁写锁,和读锁无关writerSem uint32 // sema锁--用于“写协程”排队等待readerSem uint32 // sema锁--用于“读协程”排队…...
软考马上要报名了,出现这些问题怎么办?
目前,四川、山东、山西、辽宁、河北等地已经率先发布了2023年上半年软考报名通知。 四川:2023年3月13日-4月4日 山东:2023年3月17日9:00-4月3日16:00 山西:2023年3月14日9:00-3月28日11:00 辽宁:2023年3月14日8:30…...
ES6从入门到精通:前言
ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var…...
渲染学进阶内容——模型
最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...
基于数字孪生的水厂可视化平台建设:架构与实践
分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...
Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信
文章目录 Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket(服务端和客户端都要)2. 绑定本地地址和端口&#x…...
SQL慢可能是触发了ring buffer
简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...
关于uniapp展示PDF的解决方案
在 UniApp 的 H5 环境中使用 pdf-vue3 组件可以实现完整的 PDF 预览功能。以下是详细实现步骤和注意事项: 一、安装依赖 安装 pdf-vue3 和 PDF.js 核心库: npm install pdf-vue3 pdfjs-dist二、基本使用示例 <template><view class"con…...
如何应对敏捷转型中的团队阻力
应对敏捷转型中的团队阻力需要明确沟通敏捷转型目的、提升团队参与感、提供充分的培训与支持、逐步推进敏捷实践、建立清晰的奖励和反馈机制。其中,明确沟通敏捷转型目的尤为关键,团队成员只有清晰理解转型背后的原因和利益,才能降低对变化的…...
0x-3-Oracle 23 ai-sqlcl 25.1 集成安装-配置和优化
是不是受够了安装了oracle database之后sqlplus的简陋,无法删除无法上下翻页的苦恼。 可以安装readline和rlwrap插件的话,配置.bahs_profile后也能解决上下翻页这些,但是很多生产环境无法安装rpm包。 oracle提供了sqlcl免费许可,…...
【Linux】Linux安装并配置RabbitMQ
目录 1. 安装 Erlang 2. 安装 RabbitMQ 2.1.添加 RabbitMQ 仓库 2.2.安装 RabbitMQ 3.配置 3.1.启动和管理服务 4. 访问管理界面 5.安装问题 6.修改密码 7.修改端口 7.1.找到文件 7.2.修改文件 1. 安装 Erlang 由于 RabbitMQ 是用 Erlang 编写的,需要先安…...
如何通过git命令查看项目连接的仓库地址?
要通过 Git 命令查看项目连接的仓库地址,您可以使用以下几种方法: 1. 查看所有远程仓库地址 使用 git remote -v 命令,它会显示项目中配置的所有远程仓库及其对应的 URL: git remote -v输出示例: origin https://…...
