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# 默认的编码方式是 ...
随机推荐
- _stdcall
__cdecl __fastcall与__stdcall,三者都是调用约定(Calling convention),它决定以下内容:1)函数参数的压栈顺序,2)由调用者还是被调用者把参数弹出栈,3)以 ...
- 【LeetCode 84】柱状图中最大的矩形
题目链接 [题解] 维护一个单调递增的栈. 会发现栈内的第i个元素的前面一个(i-1)元素在原始的序列中的数字 都是要高于第i个元素的.(或者没有元素) 那么第i个元素往左最多可以扩展到第i-1个元素 ...
- flutter中的路由跳转
在前面的基本路由和命名路由中,都演示了如何进行路由跳转,并且在路由跳转以后,可以借用系统自带的按钮就行返回上一级,当然了,也可以自定义按钮返回上一级. 返回上一级 在前面的例子中,当从Home.dar ...
- CSS-inline-block 间隙
间隙产生的原因是`inline-block`对外是`inline`,对内是`block`.`inline`会将连续的空白符解析为一个空格(如:下面示例的两个`li`之间的后面的换行空格).取消间隙的方 ...
- 用 Flask 来写个轻博客 (32) — 使用 Flask-RESTful 来构建 RESTful API 之一
目录 目录 前文列表 扩展阅读 RESTful API REST 原则 无状态原则 面向资源 RESTful API 的优势 REST 约束 前文列表 用 Flask 来写个轻博客 (1) - 创建项 ...
- delphi xe2 opencv 学习
安装环境 delphi xe2 + opencv opencv 从下面的地方下载 https://github.com/Laex/Delphi-OpenCV然后按照 此网站的 说明 一项以项的 安装 ...
- crontab 使用
1. 安装,结构 yum install cronie 结构: * * * * * [分钟] [小时] [每月的某一天] [每年的某一月] [每周的某一天] 2.命令 1,添加或更新crontab中的 ...
- Html5 学习笔记 【PC固定布局】 实战4 footer 区域
最终效果图: Html代码: <!DOCTYPE html> <html lang="zh-cn"> <head> <meta chars ...
- QTP场景恢复函数
public Function RecoveryFunction1(Object, Method, Arguments, retVal) Dim FileName ,TimeNow, ResPath ...
- python-orm操作数据库
ORM 模型 ORM概念 对象关系映射 全称(Object Relational Mapping) 简称ORM 模式是一种为了解决面向对象与关系型数据库存在的互不匹配的现象的技术. 简单来说, ORM ...