QTcpSocket发送结构体
我需要发送的结构体
- struct NetDataHeader_t {
- int nDataType;
- int nDataSize;
- };
- struct NetDataBase_t {
- NetDataHeader_t dataHeader;
- double hValue;
- double lValue;
- double temperature;
- };
我的运行函数
- #include "mainwindow.h"
- #include "ui_mainwindow.h"
- #include <QDebug>
- #include "sensordata.h"
- #include <cstring>
- MainWindow::MainWindow(QWidget *parent) :
- QMainWindow(parent),
- ui(new Ui::MainWindow)
- {
- ui->setupUi(this);
- mySocket = new QTcpSocket();
- QObject::connect(mySocket, &QTcpSocket::readyRead, this, &MainWindow::MySocketReadData);
- QObject::connect(mySocket, &QTcpSocket::disconnected, this, &MainWindow::MySocketDisconnected);
- ui->btnSend->setEnabled(false);
- ui->lineEdit_IP->setText("127.0.0.1");
- ui->lineEdit_Port->setText("");
- }
- MainWindow::~MainWindow()
- {
- delete mySocket;
- delete ui;
- }
- void MainWindow::MySocketReadData()
- {
- QByteArray buffer;
- buffer = mySocket->readAll();
- struct NetDataBase_t myData;
- if(!buffer.isEmpty()) {
- char *src = buffer.data();
- memcpy(&myData, src, sizeof(struct NetDataBase_t));
- ui->textEdit_Recv->setText(QString("hValue:%1,lValue%2,temp:%3")
- .arg(QString::number(myData.hValue, 'g', ))
- .arg(QString::number(myData.lValue, 'g', )).arg(myData.temperature));
- }
- }
- void MainWindow::MySocketDisconnected()
- {
- ui->btnSend->setEnabled(false);
- ui->btnConnect->setText("连接");
- qDebug()<<"Disconnected!";
- }
- void MainWindow::on_btnSend_clicked()
- {
- struct NetDataBase_t myData;
- myData.dataHeader.nDataSize = ;
- myData.dataHeader.nDataSize = sizeof(struct NetDataBase_t) - sizeof(struct NetDataHeader_t);
- myData.hValue = -1.234567890;
- myData.lValue = 0.123456789;
- myData.temperature = 23.1;
- QByteArray data;
- data.resize(sizeof(struct NetDataBase_t));
- memcpy(data.data(), &myData, sizeof(struct NetDataBase_t));
- mySocket->write(data);
- mySocket->flush();
- }
- void MainWindow::on_btnConnect_clicked()
- {
- if(ui->btnConnect->text() == tr("连接")) {
- QString ip;
- int port;
- ip = ui->lineEdit_IP->text();
- port = ui->lineEdit_Port->text().toInt();
- mySocket->abort();
- mySocket->connectToHost(ip, port);
- if(!mySocket->waitForConnected()) {
- qDebug()<<"Connection failed!";
- return;
- }
- qDebug()<<"Connect successfully!";
- ui->btnSend->setEnabled(true);
- ui->btnConnect->setText("断开连接");
- } else {
- mySocket->disconnectFromHost();
- ui->btnConnect->setText("连接");
- ui->btnSend->setEnabled(false);
- }
- }
同时使用QBytearray的data函数转换成字符串形式。
然后用memcpy进行复制和转换。
--------------------------------
或许还可以这样,没试过:把结构体转换成一个QString型的就可以write了,然后就可以了。
用QString::fromascii()去转换吧,或者是QString::fromlocal8bit()去转换
QTcpSocket发送结构体的更多相关文章
- C# Socket 入门4 UPD 发送结构体(转)
今天我们来学 socket 发送结构体 1. 先看要发送的结构体 using System; using System.Collections.Generic; using System.Text; ...
- Linux C Socket编程发送结构体、文件详解及实例
利用Socket发送文件.结构体.数字等,是在Socket编程中经常需要用到的.由于Socket只能发送字符串,所以可以使用发送字符串的方式发送文件.结构体.数字等等. 本文:http://www.c ...
- socket发送结构体
struct send_info {char info_from[20]; //发送者IDchar info_to[20]; //接收者IDint info_length; //发送的消息主体的长度c ...
- pythonUDP发送结构体,对齐到C++结构体
给出程序先: import random import socket import struct import threading import pickle import json from str ...
- java socket传送一个结构体给用C++编写的服务器解析的问题
另一端是Java写客户端程序,两者之间需要通信.c++/c接收和发送的都是结构体,而Java是直接发送的字节流或者byte 数组.解决方法:c++/c socket 在发送结构体的时候其实发送的也是字 ...
- enginefuncs_t 结构体中的函数
就是常见的 g_engfuncs 中的函数.AMXX 里就是 fakemeta 的 EngFunc_** // 这些函数由引擎提供给EXTDLL使用.mp.dll hl.dll ... typedef ...
- C#结构体数组间的转化
转自:http://developer.51cto.com/art/200908/143779.htm 解决C#结构体数组间的转化问题的由来:在写C#TCP通信程序时,发送数据时,如果是和VC6.0等 ...
- WPF向系统发送消息 并传递结构体
场景 :需要开发一个通讯组件 流程为:界面-开启接收服务-通过发送组件发送信息到 其他客户端和服务端 接受服务接收其他客户端发送的消息 需要传递给对应组件或者界面 因此会出现类库重复引用问题.因为采用 ...
- C#引用c++DLL结构体数组注意事项(数据发送与接收时)
本文转载自:http://blog.csdn.net/lhs198541/article/details/7593045 最近做的项目,需要在C# 中调用C++ 写的DLL,因为C# 默认的编码方式是 ...
随机推荐
- Windows下安装的Jenkins修改默认端口号8080(修改配置文件的方式)
1.首先在Windows下找到Jenkins安装目录.2.在安装目录下找到jenkins.xml文件 3.打开jenkins.xml文件,找到httpPort=8080 4.修改成你想要的端口号即可, ...
- 项目中有 xxxx 不能被json序列化
遇到这类问题 ,首先断点调试,看看要序列化的值 是一个什么类型的值 查看值得数据类型 在将值转化成可以被json序列化的对象 此时即可解决问题 如遇到 requests.post() 朝一个url发 ...
- sql 连接的使用说明
SQL中的left outer join,inner join,right outer join用法详解 使用关系代数合并数据 关系代数 合并数据集合的理论基础是关系代数,它是由E.F.Codd于19 ...
- 【Java】时间戳与Date相互转换
时间戳转Date public static void main(String[] args) { // 10位的秒级别的时间戳 long time1 = 1527767665; String res ...
- 高精度模板 洛谷Luogu P1932 A+B & A-B & A*B & A/B Problem
P1932 A+B & A-B & A*B & A/B Problem 题目背景 这个题目很新颖吧!!! 题目描述 求A.B的和差积商余! 输入输出格式 输入格式: 两个数两行 ...
- (转)springboot应用启动原理(二) 扩展URLClassLoader实现嵌套jar加载
转:https://segmentfault.com/a/1190000013532009 在上篇文章<springboot应用启动原理(一) 将启动脚本嵌入jar>中介绍了springb ...
- 登录成功后如何利用cookie保持登录状态
Cookie是一种服务器发送给浏览器的一组数据,用于浏览器跟踪用户,并访问服务器时保持登录状态等功能. 通常用户登录的时候,服务器根据用户名和密码在服务器数据库中校验该用户是否正确,校验正确后则可以根 ...
- python接口自动化测试三十六:数据驱动参数化之paramunittest
官方文档1.官方文档地址:https://pypi.python.org/pypi/ParamUnittest/2.github源码下载地址:https://github.com/rik0/Param ...
- [已解决]报错: Could not install packages due to an EnvironmentError: [Errno 13] Permission denied: '/Users/mac/Ana
报错代码: pip3 install gerapy 报错内容: Could not install packages due to an EnvironmentError: [Errno 13] Pe ...
- 调用Consul服务(消费服务)
调用Consul服务(消费服务) 依赖项 在spring-cloud-consul-client项目中添加依赖项,POM文件内容中添加如下依赖项: <dependency> <gro ...