我需要发送的结构体

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发送结构体的更多相关文章

  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. springmvc的@ModelAttribute

    1:作用:执行任何方法前都要先执行一下有这个标识的方法. 用途:表单回显的时候先从数据库中查询出来放到这个方法中. 1):模拟表单 <form action="first/testMo ...

  2. 谷歌已经对Android的开源严防死守

    上周,沸沸扬扬的Android垄断案把Google又一次推向了风口浪尖,在这次的垄断案中,Google被欧盟起诉赔偿50亿美元,被起诉的其中一个原因是Google对外宣称Android是开放的,但其实 ...

  3. 关于12306Bypass-分流抢票

    12306Bypass-分流抢票-2013-15年          官网:http://www.12306bypass.com 分流抢票是一款完全免费的抢票软件,请抵制淘宝贩卖等诈骗行为 作者不会授 ...

  4. 使用C#实现网站用户登录

    我们在写灌水机器人.抓资源机器人和Web网游辅助工具的时候第一步要实现的就是用户登录.那么怎么用C#来模拟一个用户的登录拉?要实现用户的登录,那么首先就必须要了解一般网站中是怎么判断用户是否登录的.H ...

  5. MySqL rownum 序号 类似于 oracle的rownum

    mysql中没有 rownum 序号的功能,所以需要自己去实现序号的功能. @rownum 只是一个变量 可以换为 @i 等其他变量,但必须有@符号 SELECT @rownum:=@rownum+1 ...

  6. sonarqube6.7.1使用

    1.插件安装 方法1.登入sonarqube-web安装 admin/admin 配置--应用市场--全部 英文片:administration--configuration--marketplace ...

  7. [POJ3735]Training little cats

    题目:Training little cats 链接:http://poj.org/problem?id=3735 分析: 1)将操作用矩阵表示出来,然后快速幂优化. 2)初始矩阵:$ \left[ ...

  8. qbxt Day2 on 19-7-25

    qbxt Day2 on 19-7-25 --TGZCBY 上午 1. 矩阵乘法在图论上的应用 有的时候图论的转移方程可以用dp的方式转移 特别是两个数的乘积求和的时候 比如邻接矩阵中f[i][j]表 ...

  9. linux nfs文件共享

    ◆一.概念   NFS是网络文件系统(Network File System)的简称,是分布式计算机系统的一个组成部分,可实现在异构网络上共享和装配远程文件系统.   NFS由SUN公司开发,目前已成 ...

  10. windows汇编语言开发环境搭建

    1.下载软件mash32 http://www.masm32.com/download/masm32v11r.zip 此软件包含对汇编文件的编译和运行,下载后直接运行并解压即可 2.配置环境变量 在系 ...