优化scoket
This commit is contained in:
parent
5525e96c9b
commit
5b93c1e055
@ -9,6 +9,7 @@ CONFIG += c++11
|
|||||||
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
|
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
|
||||||
|
|
||||||
SOURCES += \
|
SOURCES += \
|
||||||
|
MyTcpClient.cpp \
|
||||||
acceleration.cpp \
|
acceleration.cpp \
|
||||||
common.cpp \
|
common.cpp \
|
||||||
keyphase.cpp \
|
keyphase.cpp \
|
||||||
@ -23,6 +24,7 @@ SOURCES += \
|
|||||||
velocity.cpp
|
velocity.cpp
|
||||||
|
|
||||||
HEADERS += \
|
HEADERS += \
|
||||||
|
MyTcpClient.h \
|
||||||
acceleration.h \
|
acceleration.h \
|
||||||
common.h \
|
common.h \
|
||||||
data_config.h \
|
data_config.h \
|
||||||
|
@ -26,7 +26,8 @@ enum CMTCommand {
|
|||||||
kUpgradeCard = 3,
|
kUpgradeCard = 3,
|
||||||
kGetVersionInfo = 4,
|
kGetVersionInfo = 4,
|
||||||
kRelaySetting = 5,
|
kRelaySetting = 5,
|
||||||
kRelayStatus = 6
|
kRelayStatus = 6,
|
||||||
|
kUpgradeProgress = 7
|
||||||
};
|
};
|
||||||
enum SlotType{
|
enum SlotType{
|
||||||
POWER = 10,
|
POWER = 10,
|
||||||
|
161
mainwindow.cpp
161
mainwindow.cpp
@ -5,7 +5,7 @@
|
|||||||
#include <QJsonDocument>
|
#include <QJsonDocument>
|
||||||
#include <QJsonArray>
|
#include <QJsonArray>
|
||||||
#include <QJsonObject>
|
#include <QJsonObject>
|
||||||
#include <QTcpSocket>
|
|
||||||
#include "keyphase.h"
|
#include "keyphase.h"
|
||||||
#include "singlerelay.h"
|
#include "singlerelay.h"
|
||||||
#include "tachometer.h"
|
#include "tachometer.h"
|
||||||
@ -18,7 +18,7 @@
|
|||||||
#include <qsettings.h>
|
#include <qsettings.h>
|
||||||
#include <QNetworkProxy>
|
#include <QNetworkProxy>
|
||||||
#include "relaysetting.h"
|
#include "relaysetting.h"
|
||||||
#include "common.h"
|
|
||||||
QString g_strServerIp;
|
QString g_strServerIp;
|
||||||
|
|
||||||
MainWindow::MainWindow(QWidget *parent)
|
MainWindow::MainWindow(QWidget *parent)
|
||||||
@ -35,10 +35,22 @@ MainWindow::MainWindow(QWidget *parent)
|
|||||||
ui->widget_body->installEventFilter(this);
|
ui->widget_body->installEventFilter(this);
|
||||||
ui->widget_body->setProperty("flag", "body");
|
ui->widget_body->setProperty("flag", "body");
|
||||||
ui->statusBar->setProperty("flag","status");
|
ui->statusBar->setProperty("flag","status");
|
||||||
|
|
||||||
|
// 创建进度条
|
||||||
|
progressBar = new QProgressBar(this);
|
||||||
|
|
||||||
|
// 设置进度条的范围(0到100)
|
||||||
|
progressBar->setRange(0, 100);
|
||||||
|
|
||||||
|
// 将进度条添加到状态栏
|
||||||
|
statusBar()->addWidget(progressBar);
|
||||||
|
progressBar->setVisible(false); // 初始隐藏
|
||||||
|
progressBar->setFixedWidth(300);
|
||||||
|
|
||||||
//this->initStyle();
|
//this->initStyle();
|
||||||
//添加信号槽
|
//添加信号槽
|
||||||
QObject::connect(ui->action_realy, &QAction::triggered, this, &MainWindow::onMenuAction_relay);
|
QObject::connect(ui->action_realy, &QAction::triggered, this, &MainWindow::onMenuAction_relay);
|
||||||
slot = -1;
|
slot_no = -1;
|
||||||
btnGroup_slot = new QButtonGroup(this);
|
btnGroup_slot = new QButtonGroup(this);
|
||||||
btnGroup_slot->addButton(ui->pushButton_slot0);
|
btnGroup_slot->addButton(ui->pushButton_slot0);
|
||||||
btnGroup_slot->addButton(ui->pushButton_slot1);
|
btnGroup_slot->addButton(ui->pushButton_slot1);
|
||||||
@ -84,7 +96,7 @@ MainWindow::MainWindow(QWidget *parent)
|
|||||||
QSettings settingsread(QCoreApplication::applicationDirPath() + "\\config\\config.ini",QSettings::IniFormat);
|
QSettings settingsread(QCoreApplication::applicationDirPath() + "\\config\\config.ini",QSettings::IniFormat);
|
||||||
|
|
||||||
g_strServerIp = settingsread.value("Server/IP").toString();
|
g_strServerIp = settingsread.value("Server/IP").toString();
|
||||||
|
connectServer();
|
||||||
// 设置自定义日志处理函数
|
// 设置自定义日志处理函数
|
||||||
#ifndef QT_DEBUG
|
#ifndef QT_DEBUG
|
||||||
qInstallMessageHandler(messageHandler);
|
qInstallMessageHandler(messageHandler);
|
||||||
@ -96,6 +108,34 @@ MainWindow::~MainWindow()
|
|||||||
{
|
{
|
||||||
delete ui;
|
delete ui;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MainWindow::connectServer()
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
// 连接服务器
|
||||||
|
client.connectToServer(g_strServerIp, 10000);
|
||||||
|
//client.sendData("send_buf", 1);
|
||||||
|
// // 监听信号
|
||||||
|
// QObject::connect(&client, &MyTcpClient::connected, []() {
|
||||||
|
// qDebug() << "Client connected!";
|
||||||
|
// });
|
||||||
|
|
||||||
|
// // QObject::connect(&client, &MyTcpClient::dataReceived, [](const QByteArray &data) {
|
||||||
|
// // qDebug() << "Received from server:" << data;
|
||||||
|
// // });
|
||||||
|
connect(&client, SIGNAL(dataReceived(const QByteArray&)), this, SLOT(readData(const QByteArray&)));
|
||||||
|
connect(&client, SIGNAL(disconnected()), this, SLOT(onDisConnected()));
|
||||||
|
// // QObject::connect(&client, &MyTcpClient::errorOccurred, [](const QString &error) {
|
||||||
|
// // qDebug() << "Error:" << error;
|
||||||
|
// // });
|
||||||
|
// socket = new QTcpSocket(this);
|
||||||
|
// connect(socket, &QTcpSocket::connected, this, &MainWindow::onConnected);
|
||||||
|
// connect(socket, &QTcpSocket::readyRead, this, &MainWindow::readData);
|
||||||
|
// socket->connectToHost(g_strServerIp, 10000);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
void MainWindow::initStyle()
|
void MainWindow::initStyle()
|
||||||
{
|
{
|
||||||
//加载样式表
|
//加载样式表
|
||||||
@ -542,22 +582,10 @@ void MainWindow::sendUpgradePackage(int slot)
|
|||||||
qWarning() << "Failed to open update file.";
|
qWarning() << "Failed to open update file.";
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
QTcpSocket socket;
|
|
||||||
|
|
||||||
// 连接到服务器
|
|
||||||
QNetworkProxy proxy;
|
|
||||||
proxy.setType(QNetworkProxy::NoProxy); // 不使用代理
|
|
||||||
socket.connectToHost(g_strServerIp, 10000);
|
|
||||||
socket.setProxy(proxy);
|
|
||||||
if (!socket.waitForConnected()) {
|
|
||||||
qDebug() << "Connection failed!";
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 读取文件内容
|
// 读取文件内容
|
||||||
QByteArray fileData = file.readAll();
|
QByteArray fileData = file.readAll();
|
||||||
int fileSize = fileData.size();
|
int fileSize = fileData.size();
|
||||||
//fileSize = myHtonl(fileSize);
|
|
||||||
|
|
||||||
qDebug() << "fileSize" << fileSize <<endl;
|
qDebug() << "fileSize" << fileSize <<endl;
|
||||||
// 创建 PackageHead 结构体
|
// 创建 PackageHead 结构体
|
||||||
@ -574,20 +602,7 @@ void MainWindow::sendUpgradePackage(int slot)
|
|||||||
header.crc = calculate_crc(upgrade_car_req.card_id,fileData);
|
header.crc = calculate_crc(upgrade_car_req.card_id,fileData);
|
||||||
header.len = fileSize;
|
header.len = fileSize;
|
||||||
qDebug() << "filheader.crc" << header.crc << "card_id" << upgrade_car_req.card_id << endl;
|
qDebug() << "filheader.crc" << header.crc << "card_id" << upgrade_car_req.card_id << endl;
|
||||||
// 发送头部数据
|
|
||||||
//QByteArray packet(reinterpret_cast<char*>(&header), sizeof(PackageHead));
|
|
||||||
|
|
||||||
// 发送文件内容
|
|
||||||
// socket.write(packet); // 发送头部
|
|
||||||
// socket.waitForBytesWritten();
|
|
||||||
|
|
||||||
// QByteArray packet2(reinterpret_cast<char*>(&upgrade_car_req), sizeof(UpgradeCardReq));
|
|
||||||
// socket.write(packet2); // 发送头部
|
|
||||||
// socket.waitForBytesWritten();
|
|
||||||
|
|
||||||
// socket.write(fileData); // 发送文件数据
|
|
||||||
// socket.waitForBytesWritten();
|
|
||||||
//QByteArray send_buf;
|
|
||||||
char *send_buf = NULL;
|
char *send_buf = NULL;
|
||||||
send_buf = (char *)malloc(sizeof(PackageHead) + sizeof(UpgradeCardReq) + fileData.size() + 1);
|
send_buf = (char *)malloc(sizeof(PackageHead) + sizeof(UpgradeCardReq) + fileData.size() + 1);
|
||||||
memset(send_buf,0,sizeof(PackageHead) + sizeof(UpgradeCardReq) + fileData.size() + 1);
|
memset(send_buf,0,sizeof(PackageHead) + sizeof(UpgradeCardReq) + fileData.size() + 1);
|
||||||
@ -609,45 +624,27 @@ void MainWindow::sendUpgradePackage(int slot)
|
|||||||
}else{
|
}else{
|
||||||
chunkSize = totalBytes - bytesSent;
|
chunkSize = totalBytes - bytesSent;
|
||||||
}
|
}
|
||||||
qint64 bytesWritten = socket.write(send_buf + bytesSent, chunkSize);
|
qint64 bytesWritten = client.sendData(send_buf + bytesSent, chunkSize);
|
||||||
socket.waitForBytesWritten();
|
|
||||||
qDebug() << "bytesWritten" << bytesWritten << "bytesSent" << bytesSent << endl;
|
qDebug() << "bytesWritten" << bytesWritten << "bytesSent" << bytesSent << endl;
|
||||||
if (bytesWritten == -1) {
|
if (bytesWritten == -1) {
|
||||||
// Handle error
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
bytesSent += bytesWritten;
|
bytesSent += bytesWritten;
|
||||||
}
|
}
|
||||||
if (socket.waitForReadyRead()) {
|
qDebug() << "bytesSent" << bytesSent << endl;
|
||||||
QByteArray response = socket.readAll();
|
client.waitForRead();
|
||||||
UpgradeRsp resp;
|
progressBar->reset();
|
||||||
QByteArray byteArray = response.mid(sizeof(PackageHead));
|
progressBar->setVisible(true);
|
||||||
QDataStream stream(&byteArray, QIODevice::ReadOnly);
|
QString upgrade_text = QStringLiteral("正在上传板卡 [ %1 ] …… %p%").arg(slot);
|
||||||
stream >> resp.code ;
|
progressBar->setTextVisible(true);
|
||||||
if(resp.code == 1){
|
progressBar->setFormat(upgrade_text);
|
||||||
QMessageBox::information(this, QStringLiteral("提示"), "上传成功!");
|
|
||||||
}
|
|
||||||
qDebug() << "Server response: " << resp.code;
|
|
||||||
}
|
|
||||||
// 关闭文件和连接
|
|
||||||
file.close();
|
file.close();
|
||||||
socket.disconnectFromHost();
|
|
||||||
if(send_buf != NULL)
|
if(send_buf != NULL)
|
||||||
free(send_buf);
|
free(send_buf);
|
||||||
}
|
}
|
||||||
void MainWindow::getVersion(int slot)
|
void MainWindow::getVersion(int slot)
|
||||||
{
|
{
|
||||||
// 连接到服务器
|
slot_no = slot;
|
||||||
QTcpSocket socket;
|
|
||||||
// 连接到服务器
|
|
||||||
QNetworkProxy proxy;
|
|
||||||
proxy.setType(QNetworkProxy::NoProxy); // 不使用代理
|
|
||||||
socket.connectToHost(g_strServerIp, 10000);
|
|
||||||
socket.setProxy(proxy);
|
|
||||||
if (!socket.waitForConnected()) {
|
|
||||||
qDebug() << "Connection failed!";
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
PackageHead header = { {0xAA, 0x55, 0xAA}, kGetVersionInfo, 1,0,{} };
|
PackageHead header = { {0xAA, 0x55, 0xAA}, kGetVersionInfo, 1,0,{} };
|
||||||
qDebug() << "slot" << slot <<endl;
|
qDebug() << "slot" << slot <<endl;
|
||||||
GetVersionReq get_version_req;
|
GetVersionReq get_version_req;
|
||||||
@ -659,19 +656,43 @@ void MainWindow::getVersion(int slot)
|
|||||||
memcpy(send_buf, (char*)&header, sizeof(PackageHead));
|
memcpy(send_buf, (char*)&header, sizeof(PackageHead));
|
||||||
memcpy(send_buf + sizeof(PackageHead), (char*)&get_version_req, sizeof(GetVersionReq));
|
memcpy(send_buf + sizeof(PackageHead), (char*)&get_version_req, sizeof(GetVersionReq));
|
||||||
int length = sizeof(PackageHead) + sizeof(GetVersionReq);
|
int length = sizeof(PackageHead) + sizeof(GetVersionReq);
|
||||||
qint64 bytesWritten = socket.write(send_buf, length);
|
qint64 bytesWritten = client.sendData(send_buf, length);
|
||||||
qDebug() << "Server response: " << bytesWritten;
|
client.waitForRead();
|
||||||
if (socket.waitForReadyRead()) {
|
qDebug() << "bytesWritten: " << bytesWritten;
|
||||||
QByteArray response = socket.readAll();
|
}
|
||||||
VersionRsp version_rsp;
|
void MainWindow::onDisConnected()
|
||||||
PackageHead header;
|
{
|
||||||
memcpy(&header,response.data(),sizeof(PackageHead));
|
statusBar()->showMessage("连接失败!", 10000); // 显示3秒
|
||||||
qDebug() << "header len" << header.len << endl;
|
|
||||||
if(header.cmd == kGetVersionInfo){
|
|
||||||
memcpy(&version_rsp,response.data() + sizeof(PackageHead),sizeof(VersionRsp));
|
|
||||||
QString strVerion = QString("第 %1 板卡\nFPGA 版本:%2\n软件版本:%3\nFPGA版本日期:%4").arg(slot).arg(version_rsp.fpga).arg(version_rsp.sw).arg(version_rsp.fpga_data);
|
|
||||||
QMessageBox::information(this, QStringLiteral("提示"), strVerion);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MainWindow::readData(const QByteArray& data)
|
||||||
|
{
|
||||||
|
qDebug() << "Received from server:" << data;
|
||||||
|
PackageHead header;
|
||||||
|
memcpy(&header,data.data(),sizeof(PackageHead));
|
||||||
|
if(header.cmd == kGetVersionInfo){
|
||||||
|
VersionRsp version_rsp;
|
||||||
|
memcpy(&version_rsp,data.data() + sizeof(PackageHead),sizeof(VersionRsp));
|
||||||
|
QString strVerion = QString("第 %1 板卡\nFPGA 版本:%2\n软件版本:%3\nFPGA版本日期:%4").arg(slot_no).arg(version_rsp.fpga).arg(version_rsp.sw).arg(version_rsp.fpga_data);
|
||||||
|
QMessageBox::information(this, QStringLiteral("提示"), strVerion);
|
||||||
|
}else if(header.cmd == kUpgradeCard){
|
||||||
|
UpgradeRsp resp;
|
||||||
|
QByteArray byteArray = data.mid(sizeof(PackageHead));
|
||||||
|
QDataStream stream(&byteArray, QIODevice::ReadOnly);
|
||||||
|
stream >> resp.code ;
|
||||||
|
// if(resp.code == 1){
|
||||||
|
// QMessageBox::information(this, QStringLiteral("提示"), "上传成功!");
|
||||||
|
// }
|
||||||
|
}else if(header.cmd == kUpgradeProgress){
|
||||||
|
QByteArray byteArray = data.mid(sizeof(PackageHead));
|
||||||
|
UpgradeRsp upgrade_resp;
|
||||||
|
QDataStream stream(&byteArray, QIODevice::ReadOnly);
|
||||||
|
stream >> upgrade_resp.code ;
|
||||||
|
progressBar->setValue(upgrade_resp.code);
|
||||||
|
if(upgrade_resp.code == 100){
|
||||||
|
progressBar->setVisible(false);
|
||||||
|
statusBar()->showMessage("升级完成!", 3000); // 显示3秒
|
||||||
|
}
|
||||||
|
//qDebug() << "Server response: " << upgrade_resp.code;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
13
mainwindow.h
13
mainwindow.h
@ -5,7 +5,10 @@
|
|||||||
#include <QMap>
|
#include <QMap>
|
||||||
#include <QButtonGroup>
|
#include <QButtonGroup>
|
||||||
#include <QPushButton>
|
#include <QPushButton>
|
||||||
|
#include <QTcpSocket>
|
||||||
|
#include "MyTcpClient.h"
|
||||||
#include "data_config.h"
|
#include "data_config.h"
|
||||||
|
#include <QProgressBar>
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
namespace Ui { class MainWindow; }
|
namespace Ui { class MainWindow; }
|
||||||
@ -37,7 +40,11 @@ private:
|
|||||||
|
|
||||||
QButtonGroup * btnGroup_slot = nullptr;
|
QButtonGroup * btnGroup_slot = nullptr;
|
||||||
|
|
||||||
int slot;
|
int slot_no = 0;
|
||||||
|
QTcpSocket *socket;
|
||||||
|
MyTcpClient client;
|
||||||
|
|
||||||
|
QProgressBar *progressBar;
|
||||||
|
|
||||||
void createMenu();
|
void createMenu();
|
||||||
void createMenu(const QString& rootTitle, QPushButton* button = nullptr);
|
void createMenu(const QString& rootTitle, QPushButton* button = nullptr);
|
||||||
@ -48,7 +55,11 @@ private:
|
|||||||
void sendUpgradePackage(int slot);
|
void sendUpgradePackage(int slot);
|
||||||
void getVersion(int slot);
|
void getVersion(int slot);
|
||||||
void initStyle();
|
void initStyle();
|
||||||
|
void connectServer();
|
||||||
private slots:
|
private slots:
|
||||||
|
|
||||||
|
void onDisConnected();
|
||||||
|
void readData(const QByteArray&);
|
||||||
void onMenuAction_relay();
|
void onMenuAction_relay();
|
||||||
void OnButtonGroup(QAbstractButton *);
|
void OnButtonGroup(QAbstractButton *);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user