QT学习之UDP

#include <QUdpSocket>// UDP 接受的数据char buf[1024] = { 0 };// 接受到数据的标识bool bRecvFlag = false;//Udp服务器QUdpSocket* mSocket;//通信的ip和端口,用于获取发送者的 IP 和端口QHostAddress sendAddr; // 本机QHostAddress recAddr;  // 设备ipquint16 recPort;quint16 sendPort;bool XXXCard::init() {mSocket = new QUdpSocket(this);// 发送指令的机器所在ip和端口QSettings ini_config("ICCardReader.ini", QSettings::IniFormat);ini_config.setIniCodec(QTextCodec::codecForName("utf-8"));ini_config.beginGroup("XXX");QString sendIP = ini_config.value("sendIP").toString();// 监听error()信号 不要监听这个,mSocket->waitForReadyRead会走到监听的槽函数里// connect(mSocket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(handleError(QAbstractSocket::SocketError)));//sendAddr.setAddress("192.168.1.2");sendAddr.setAddress(sendIP.isEmpty()?"192.168.1.2": sendIP);QString sendPortStr = ini_config.value("sendPort").toString();sendPortStr = sendPortStr.isEmpty() ? "8080" : sendPortStr;sendPort = sendPortStr.toInt();bool bRet = mSocket->bind(sendPort);// 接受指令的设备所在ip和端口 会返回响应报文QString cardIP = ini_config.value("cardIP").toString();recAddr.setAddress(cardIP.isEmpty() ? "192.168.1.232": cardIP);QString cardPortStr = ini_config.value("cardPort").toString();cardPortStr = cardPortStr.isEmpty() ? "8080" : cardPortStr;recPort = cardPortStr.toInt();// recPort = 8080;//  connect(mSocket, &QUdpSocket::readyRead, this, &HYB502Card::recvData);return bRet;
}// 发送二进制指令 0成功 其他返回错误
int XXXX::send_hex(const std::string& in, std::string& out) {outPutMsg(QtDebugMsg, "XXXX::send_hex invoke begin.req = " + QString(QString::fromLocal8Bit(in.c_str())));ss = "";response = "";QString qstr = QString::fromStdString(in);QByteArray baReq = qstr.toLocal8Bit();mSocket->writeDatagram(baReq, recAddr, recPort);bool flag = true;int i = 30;while (flag & i > 0){i--;Sleep(50);if (!mSocket->waitForReadyRead(10)) {continue;}quint16 port = 0;qint64 size = mSocket->readDatagram(buf, sizeof(buf), &sendAddr, &sendPort);if (size < 1) {continue;}out = buf;flag = false;  }QString res = QString::fromLocal8Bit(out.c_str());outPutMsg(QtDebugMsg, "APDU res = " + res);// pcsc_receiveBufferLen -= 2;//接受数据长度减去swint l_res = -1;if (out.length() >= 4) {ss = out.substr(out.length() - 4);response = out.substr(0, out.length() - 4);l_res = 0;}outPutMsg(QtDebugMsg, "XXXX::send_hex invoke end.");return l_res;
}

这里很多让用信号槽的方式接受返回的信息 .connect(mSocket, &QUdpSocket::readyRead, this, &HYB502Card::recvData); 实际使用中发现不好使(我查的是说发送一直占用焦点什么的,导致不会捕获到信号啥的),所以使用readDatagram直接从缓存里获取。

connect(mSocket, &QUdpSocket::readyRead, this, &HYB502Card::recvData);方式感觉比较适合单纯的接收或者发,不适合一边发一边收;

可能我理解的不准确,欢迎指正!

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

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

相关文章

使用Docker本地搭建蚂蚁笔记并实现无公网IP远程访问

文章目录 1. 安装Docker2. Docker本地部署Leanote蚂蚁笔记3. 安装cpolar内网穿透4. 固定Leanote蚂蚁笔记公网地址 本篇文章介绍如何使用Docker部署Leanote蚂蚁笔记&#xff0c;并且结合cpolar内网穿透实现公网远程访问本地笔记编辑并制作个人博客等。 Leanote 蚂蚁笔记是一款云…

Echarts 仪表盘

1、效果图 2、代码 createTenantChartOne(){var myChart1 this.$echarts.init(document.getElementById(tenant-chart-1));var dataArr 82;var title 仪表盘;let option {graphic: {type: text,left: center,top: 85%,style: {text: title,textAlign: center,//居中对齐fi…

datasophon安装doris报错

报错信息如下 fe/bin/status_fe.sh: line 50: [: -eq: unary operator expected http request failed, return value is: fe is not ready原因是status_fe.sh文件存在问题 如 ... status(){if [ -f $pid ]; thenARGET_

微服务高级篇(五):可靠消息服务

文章目录 一、消息队列MQ存在的问题&#xff1f;二、如何保证 消息可靠性 &#xff1f;2.1 生产者消息确认【对生产者配置】2.2 消息持久化2.3 消费者消息确认【对消费者配置】2.4 消费失败重试机制2.5 消费者失败消息处理策略2.6 总结 三、处理延迟消息&#xff1f;死信交换机…

application.properties 里面和 application.yml 里面都配置了同样的参数 ,哪个会生效

在Spring Boot中&#xff0c;如果application.properties和application.yml&#xff0c;application-dev.yml&#xff08;application.yml中指定了avtive: dev&#xff09;中同时配置了相同的参数&#xff0c;Spring Boot默认会按照一定的加载顺序加载配置文件&#xff0c;并且…

【保姆级带你了解机器学习的概念,步骤,分类和实践】

&#x1f525;博主&#xff1a;程序员不想YY啊&#x1f525; &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家&#x1f3c6; &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 &#x1f91d;希望本文对您有所裨益&#xff0c;如有…

uniapp踩坑细节

&#xff08;&#xff09;1 scroll-view隐藏滚动条安卓生效&#xff0c;ios不生效&#xff1f; 解决办法 &#xff08;1&#xff09;给scroll-view设置如下css样式 .country_area {width: 78.3333vw;height: 102.0667vw;overflow-y: scroll;position: absolute;left: -2vw;t…

vue2【详解】mixins —— 抽离公共逻辑

mixins 用于在 Vue 中便捷复用变量、方法、组件引用、生命周期等 使用方法 创建文件myMixin.js export const myMixin {data() {return {webName: 朝阳的博客}},created() {alert(欢迎来到${this.webName})},methods: {hi() {alert(欢迎来到${this.webName})}} }vue文件中引入…

方案功能开发:智能机器人玩具

玩具电动趣萌机器人方案开发定制&#xff0c;东莞市酷得智能科技有限公司是研发型芯片贸易公司&#xff0c;可为制造厂商朋友定制软件底层方案。下面介绍一下机器人方案可实现的功能&#xff1a; 基础功能&#xff1a; 方向&#xff1a;前进&#xff0c;后退&#xff0c;左转&a…

springboot项目中如何实现邮件告警功能(监控平台服务模拟)

介绍 模拟服务器故障&#xff0c;然后实现邮件告警 一、首先配置邮件的maven依赖 代码如下&#xff1a; <!--邮件告警--><!-- Spring Boot的邮件发送依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spri…

GO 语言基础学习记录(二)

//这里记录一些在学习golang语言基础的时候&#xff0c;发现的一些容易记错的特殊情况&#xff0c;后续发现其他的再补充。 一、变量和数据方面 1.切片和map引用类型 问题描述&#xff1a;在go中&#xff0c;切片和map是引用类型&#xff0c;所以当修改切片值的时候&#xf…

Android 15兼容性框架变更

在准备支持 Android 15 和以该平台为目标平台时&#xff0c;请将此列表与开发者选项和 ADB 命令结合使用&#xff0c;以测试和调试您的应用。 以下是您可以使用兼容性框架工具进行的操作&#xff1a; 在不实际更改应用的 targetSdkVersion 的情况下测试针对性的变更。您可以使…

【嵌入式——QT】多语言界面

【嵌入式——QT】多语言界面 多语言页面开发步骤tr()函数 多语言页面开发步骤 第一步 在你编写的代码中添加tr()函数&#xff0c;方便之后可以精准的定位到你所需要翻译的部分。 第二步 在.pro文件中添加以下代码&#xff0c;这样会让你生成相应的.ts文件&#xff0c;ts文件是…

深度学习Top10算法之深度神经网络DNN

深度神经网络&#xff08;Deep Neural Networks&#xff0c;DNN&#xff09;是人工神经网络&#xff08;Artificial Neural Networks&#xff0c;ANN&#xff09;的一种扩展。它们通过模仿人脑的工作原理来处理数据和创建模式&#xff0c;广泛应用于图像识别、语音识别、自然语…

安捷伦Agilent 85033E机械校准套件

181/2461/8938产品概述&#xff1a; 网络分析中的测量误差可分为两类:随机误差和系统误差。随机误差和系统误差都是矢量。随机误差是不可重复的测量变化&#xff0c;通常是不可预测的。系统误差是测试设置中可重复的测量变化。 系统误差包括阻抗不匹配、系统频率响应和测试设…

位运算详解教程

位运算的概述 数据以二进制的形式存储在设备中。即0&#xff0c;1两种状态。 &与运算&#xff1a;只有当两位都为1的情况下才为1&#xff0c;其余情况全是0. |或运算&#xff1a;两个位上都为0时&#xff0c;结果才为0 ^异或运算&#xff1a;两个位相同为0.相异为1 ~取…

11、Spring CLI中Action指南

动作指南 这个页面描述了你可以使用的动作: 生成(Generate) generate 动作用于生成文件。它需要一个 to 键来指定目标路径。路径是相对于执行用户定义命令的地方。如果文件已存在,则不会被覆盖。 文件的内容是使用 text 键定义的。 下面的示例展示了一个简单的生成动作…

javaSwing超级玛丽游戏

一、摘要 摘要 近年来&#xff0c;Java作为一种新的编程语言&#xff0c;以其简单性、可移植性和平台无关性等优点&#xff0c;得到了广泛地应用。J2SE称为Java标准版或Java标准平台。J2SE提供了标准的SDK开发平台。利用该平台可以开发Java桌面应用程序和低端的服务器应用程序…

在线测评系统

Hydrooj nodejs版 HustOJ php版 QDUOJ python版 QDUOJ https://gitcode.com/QingdaoU/OnlineJudge/tree/master HustOJ hustoj: hustoj -- 流行的OJ系统&#xff0c;跨平台、易安装、有题库 Hydrooj https://hydro.js.org/docs/

人工智能聊天机器人与大型语言模型 (LLM):哪个适合您的业务?

简介&#xff1a;欢迎来到未来 您可能听说过人工智能聊天机器人和大型语言模型 (LLM)&#xff0c;对吧&#xff1f; 这些技术奇迹正在重塑企业的沟通和运营方式。 但是&#xff0c;这是一个价值百万美元的问题&#xff1a;哪一个适合您的业务&#xff1f; 让我们深入了解一下&…