我需要发送的结构体

  1. struct NetDataHeader_t {
  2. int nDataType;
  3. int nDataSize;
  4. };
  5.  
  6. struct NetDataBase_t {
  7. NetDataHeader_t dataHeader;
  8. double hValue;
  9. double lValue;
  10. double temperature;
  11. };

我的运行函数

  1. #include "mainwindow.h"
  2. #include "ui_mainwindow.h"
  3. #include <QDebug>
  4. #include "sensordata.h"
  5. #include <cstring>
  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("");
  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', ))
  39. .arg(QString::number(myData.lValue, 'g', )).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 = ;
  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()) {
  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()去转换

QTcpSocket发送结构体的更多相关文章

  1. C# Socket 入门4 UPD 发送结构体(转)

    今天我们来学 socket  发送结构体 1. 先看要发送的结构体 using System; using System.Collections.Generic; using System.Text; ...

  2. Linux C Socket编程发送结构体、文件详解及实例

    利用Socket发送文件.结构体.数字等,是在Socket编程中经常需要用到的.由于Socket只能发送字符串,所以可以使用发送字符串的方式发送文件.结构体.数字等等. 本文:http://www.c ...

  3. socket发送结构体

    struct send_info {char info_from[20]; //发送者IDchar info_to[20]; //接收者IDint info_length; //发送的消息主体的长度c ...

  4. pythonUDP发送结构体,对齐到C++结构体

    给出程序先: import random import socket import struct import threading import pickle import json from str ...

  5. java socket传送一个结构体给用C++编写的服务器解析的问题

    另一端是Java写客户端程序,两者之间需要通信.c++/c接收和发送的都是结构体,而Java是直接发送的字节流或者byte 数组.解决方法:c++/c socket 在发送结构体的时候其实发送的也是字 ...

  6. enginefuncs_t 结构体中的函数

    就是常见的 g_engfuncs 中的函数.AMXX 里就是 fakemeta 的 EngFunc_** // 这些函数由引擎提供给EXTDLL使用.mp.dll hl.dll ... typedef ...

  7. C#结构体数组间的转化

    转自:http://developer.51cto.com/art/200908/143779.htm 解决C#结构体数组间的转化问题的由来:在写C#TCP通信程序时,发送数据时,如果是和VC6.0等 ...

  8. WPF向系统发送消息 并传递结构体

    场景 :需要开发一个通讯组件 流程为:界面-开启接收服务-通过发送组件发送信息到 其他客户端和服务端 接受服务接收其他客户端发送的消息 需要传递给对应组件或者界面 因此会出现类库重复引用问题.因为采用 ...

  9. C#引用c++DLL结构体数组注意事项(数据发送与接收时)

    本文转载自:http://blog.csdn.net/lhs198541/article/details/7593045 最近做的项目,需要在C# 中调用C++ 写的DLL,因为C# 默认的编码方式是 ...

随机推荐

  1. Windows下安装的Jenkins修改默认端口号8080(修改配置文件的方式)

    1.首先在Windows下找到Jenkins安装目录.2.在安装目录下找到jenkins.xml文件 3.打开jenkins.xml文件,找到httpPort=8080 4.修改成你想要的端口号即可, ...

  2. 项目中有 xxxx 不能被json序列化

    遇到这类问题 ,首先断点调试,看看要序列化的值 是一个什么类型的值 查看值得数据类型 在将值转化成可以被json序列化的对象 此时即可解决问题 如遇到  requests.post() 朝一个url发 ...

  3. sql 连接的使用说明

    SQL中的left outer join,inner join,right outer join用法详解 使用关系代数合并数据 关系代数 合并数据集合的理论基础是关系代数,它是由E.F.Codd于19 ...

  4. 【Java】时间戳与Date相互转换

    时间戳转Date public static void main(String[] args) { // 10位的秒级别的时间戳 long time1 = 1527767665; String res ...

  5. 高精度模板 洛谷Luogu P1932 A+B & A-B & A*B & A/B Problem

    P1932 A+B & A-B & A*B & A/B Problem 题目背景 这个题目很新颖吧!!! 题目描述 求A.B的和差积商余! 输入输出格式 输入格式: 两个数两行 ...

  6. (转)springboot应用启动原理(二) 扩展URLClassLoader实现嵌套jar加载

    转:https://segmentfault.com/a/1190000013532009 在上篇文章<springboot应用启动原理(一) 将启动脚本嵌入jar>中介绍了springb ...

  7. 登录成功后如何利用cookie保持登录状态

    Cookie是一种服务器发送给浏览器的一组数据,用于浏览器跟踪用户,并访问服务器时保持登录状态等功能. 通常用户登录的时候,服务器根据用户名和密码在服务器数据库中校验该用户是否正确,校验正确后则可以根 ...

  8. python接口自动化测试三十六:数据驱动参数化之paramunittest

    官方文档1.官方文档地址:https://pypi.python.org/pypi/ParamUnittest/2.github源码下载地址:https://github.com/rik0/Param ...

  9. [已解决]报错: 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 ...

  10. 调用Consul服务(消费服务)

    调用Consul服务(消费服务) 依赖项 在spring-cloud-consul-client项目中添加依赖项,POM文件内容中添加如下依赖项: <dependency> <gro ...