博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
QTcpSocket发送结构体
阅读量:4346 次
发布时间:2019-06-07

本文共 3077 字,大约阅读时间需要 10 分钟。

我需要发送的结构体

struct NetDataHeader_t {    int nDataType;    int nDataSize;};struct NetDataBase_t {    NetDataHeader_t dataHeader;    double hValue;    double lValue;    double temperature;};

 

我的运行函数

1 #include "mainwindow.h" 2 #include "ui_mainwindow.h" 3 #include 
4 #include "sensordata.h" 5 #include
6 7 MainWindow::MainWindow(QWidget *parent) : 8 QMainWindow(parent), 9 ui(new Ui::MainWindow)10 {11 ui->setupUi(this);12 13 mySocket = new QTcpSocket();14 QObject::connect(mySocket, &QTcpSocket::readyRead, this, &MainWindow::MySocketReadData);15 QObject::connect(mySocket, &QTcpSocket::disconnected, this, &MainWindow::MySocketDisconnected);16 17 ui->btnSend->setEnabled(false);18 ui->lineEdit_IP->setText("127.0.0.1");19 ui->lineEdit_Port->setText("5000");20 }21 22 MainWindow::~MainWindow()23 {24 delete mySocket;25 delete ui;26 }27 28 void MainWindow::MySocketReadData()29 {30 QByteArray buffer;31 32 buffer = mySocket->readAll();33 struct NetDataBase_t myData;34 if(!buffer.isEmpty()) {35 char *src = buffer.data();36 memcpy(&myData, src, sizeof(struct NetDataBase_t));37 ui->textEdit_Recv->setText(QString("hValue:%1,lValue%2,temp:%3")38 .arg(QString::number(myData.hValue, 'g', 12))39 .arg(QString::number(myData.lValue, 'g', 12)).arg(myData.temperature));40 }41 }42 43 void MainWindow::MySocketDisconnected()44 {45 ui->btnSend->setEnabled(false);46 47 ui->btnConnect->setText("连接");48 qDebug()<<"Disconnected!";49 }50 51 void MainWindow::on_btnSend_clicked()52 {53 struct NetDataBase_t myData;54 myData.dataHeader.nDataSize = 1;55 myData.dataHeader.nDataSize = sizeof(struct NetDataBase_t) - sizeof(struct NetDataHeader_t);56 myData.hValue = -1.234567890;57 myData.lValue = 0.123456789;58 myData.temperature = 23.1;59 60 QByteArray data;61 data.resize(sizeof(struct NetDataBase_t));62 memcpy(data.data(), &myData, sizeof(struct NetDataBase_t));63 64 mySocket->write(data);65 mySocket->flush();66 }67 68 void MainWindow::on_btnConnect_clicked()69 {70 if(ui->btnConnect->text() == tr("连接")) {71 QString ip;72 int port;73 ip = ui->lineEdit_IP->text();74 port = ui->lineEdit_Port->text().toInt();75 76 mySocket->abort();77 mySocket->connectToHost(ip, port);78 if(!mySocket->waitForConnected(30000)) {79 qDebug()<<"Connection failed!";80 return;81 }82 qDebug()<<"Connect successfully!";83 84 ui->btnSend->setEnabled(true);85 ui->btnConnect->setText("断开连接");86 } else {87 mySocket->disconnectFromHost();88 ui->btnConnect->setText("连接");89 ui->btnSend->setEnabled(false);90 }91 }

同时使用QBytearray的data函数转换成字符串形式。

然后用memcpy进行复制和转换。

 

--------------------------------

或许还可以这样,没试过:把结构体转换成一个QString型的就可以write了,然后就可以了。

用QString::fromascii()去转换吧,或者是QString::fromlocal8bit()去转换

转载于:https://www.cnblogs.com/ch122633/p/8581120.html

你可能感兴趣的文章
条件注释判断浏览器版本<!--[if lt IE 9]>
查看>>
Comparison among several SGD derivation
查看>>
ModelAndView同时向页面传递多个参数
查看>>
samba 配置参数详解
查看>>
shell 正则表达式
查看>>
expect 交互 之双引号较长变量
查看>>
Altium designer18设置原理图尺寸
查看>>
公司人数和气质的限制关系
查看>>
数据集成工具Teiid Designer的环境搭建
查看>>
Coap协议学习笔记-第一篇
查看>>
listview反弹实现详解
查看>>
Java高级架构师(一)第24节:加入ehcache,把工程加入到Git
查看>>
this用法(ryf)
查看>>
第一天博客园
查看>>
MP4文件格式的解析,以及MP4文件的分割算法
查看>>
FAT32与NTFS区别
查看>>
安卓开发环境搭建
查看>>
杭电2069
查看>>
grails
查看>>
移动Web开发规范
查看>>