当前位置: 首页 > news >正文

长沙网站建设软件百度竞价推广代理

长沙网站建设软件,百度竞价推广代理,优秀公司网站,上海平台网站建设公司排名以下是基于Qt的完整示例代码&#xff0c;包含类A接收TCP数据并通过信号通知类B解析的实现&#xff1a; ------------------ ClassA.h 网络数据接收类 ------------------ #pragma once#include <QTcpServer> #include <QTcpSocket> #include <QObject>class…

以下是基于Qt的完整示例代码,包含类A接收TCP数据并通过信号通知类B解析的实现:

------------------ ClassA.h 网络数据接收类 ------------------
#pragma once#include <QTcpServer>
#include <QTcpSocket>
#include <QObject>class ClassA : public QObject
{Q_OBJECT
public:explicit ClassA(QObject *parent = nullptr);void startServer(quint16 port);  // 启动TCP服务器signals:void dataReceived(const QByteArray &data);  // 数据接收信号private slots:void onNewConnection();void onReadyRead();void onDisconnected();private:QTcpServer *m_server;QTcpSocket *m_socket;QByteArray m_buffer;  // 用于处理粘包/分包
};
------------------ ClassA.cpp ------------------
#include "ClassA.h"
#include <QDebug>ClassA::ClassA(QObject *parent) : QObject(parent)
{m_server = new QTcpServer(this);connect(m_server, &QTcpServer::newConnection, this, &ClassA::onNewConnection);
}void ClassA::startServer(quint16 port)
{if (!m_server->listen(QHostAddress::Any, port)) {qWarning() << "Server start failed:" << m_server->errorString();} else {qInfo() << "Server listening on port" << port;}
}void ClassA::onNewConnection()
{m_socket = m_server->nextPendingConnection();connect(m_socket, &QTcpSocket::readyRead, this, &ClassA::onReadyRead);connect(m_socket, &QTcpSocket::disconnected, this, &ClassA::onDisconnected);qInfo() << "New client connected";
}void ClassA::onReadyRead()
{m_buffer += m_socket->readAll();// 示例拆包逻辑:假设协议头4字节表示数据长度(网络字节序)while (m_buffer.size() >= 4) {// 读取数据长度(假设大端序)quint32 packetLength = qFromBigEndian<quint32>(reinterpret_cast<const uchar*>(m_buffer.constData()));// 检查数据是否完整if (m_buffer.size() < static_cast<int>(packetLength + 4)) {break;  // 数据不完整,等待下次接收}// 提取完整数据包QByteArray packet = m_buffer.mid(4, packetLength);emit dataReceived(packet);  // 发射信号// 移除已处理数据m_buffer.remove(0, 4 + packetLength);}
}void ClassA::onDisconnected()
{qInfo() << "Client disconnected";m_socket->deleteLater();
}
------------------ ClassB.h 数据解析类 ------------------
#pragma once#include <QObject>class ClassB : public QObject
{Q_OBJECT
public:explicit ClassB(QObject *parent = nullptr);public slots:void parseData(const QByteArray &data);  // 数据解析槽函数
};
------------------ ClassB.cpp ------------------
#include "ClassB.h"
#include <QDebug>ClassB::ClassB(QObject *parent) : QObject(parent) {}void ClassB::parseData(const QByteArray &data)
{// 示例解析逻辑qDebug() << "\n=== Received Packet ===";qDebug() << "Length:" << data.length();qDebug() << "Hex Content:" << data.toHex();qDebug() << "Text Content:" << data;qDebug() << "=======================";
}
------------------ main.cpp 测试程序 ------------------
#include <QCoreApplication>
#include "ClassA.h"
#include "ClassB.h"int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);// 创建对象ClassA receiver;ClassB parser;// 连接信号槽QObject::connect(&receiver, &ClassA::dataReceived, &parser, &ClassB::parseData);// 启动服务器receiver.startServer(12345);// 模拟客户端发送数据(实际应用中应为独立客户端)QTcpSocket client;client.connectToHost(QHostAddress::LocalHost, 12345);if(client.waitForConnected()) {// 构造测试数据包(4字节长度头 + 实际数据)QByteArray packet1 = "Hello";QByteArray packet2 = "Qt Signal/Slot!";// 添加长度头(大端序)QByteArray data;QDataStream stream(&data, QIODevice::WriteOnly);stream.setByteOrder(QDataStream::BigEndian);// 数据包1stream << static_cast<quint32>(packet1.size());data.append(packet1);// 数据包2stream << static_cast<quint32>(packet2.size());data.append(packet2);client.write(data);client.waitForBytesWritten();}return a.exec();
}

代码说明

  1. ClassA

    • 实现TCP服务器功能(端口监听、客户端连接管理)
    • 使用m_buffer处理TCP粘包/分包问题
    • 当收到完整数据包时发射dataReceived信号
  2. ClassB

    • 通过槽函数parseData接收数据
    • 示例解析逻辑展示数据基本信息(长度、十六进制和文本内容)
  3. main.cpp

    • 创建ClassA和ClassB实例
    • 连接信号与槽
    • 模拟客户端发送包含两个数据包的测试数据

运行效果

Server listening on port 12345
New client connected=== Received Packet ===
Length: 5
Hex Content: "48656c6c6f"
Text Content: "Hello"
========================== Received Packet ===
Length: 14
Hex Content: "5174205369676e616c2f536c6f7421"
Text Content: "Qt Signal/Slot!"
=======================

关键点解释

  1. 粘包处理

    • 使用m_buffer累积数据
    • 通过4字节长度头判断数据完整性
    • 使用mid()remove()处理缓冲区
  2. 字节序处理

    • 使用qFromBigEndian读取网络字节序
    • 通过QDataStream设置字节序
  3. 线程安全

    • 如果ClassA/ClassB在多个线程工作,需添加:
      connect(&receiver, &ClassA::dataReceived, &parser, &ClassB::parseData, Qt::QueuedConnection);
      
  4. 扩展建议

    • 在ClassB中添加具体业务协议解析逻辑
    • 在ClassA中添加错误处理(errorOccurred信号)
    • 使用QSharedPointer管理类实例生命周期
http://www.cadmedia.cn/news/5351.html

相关文章:

  • 国家 住房城乡建设信用 网站google搜索引擎
  • 企业建设网站的排名优化软件
  • 常州行业网站块链友情链接平台
  • 高端网站建设需要多少钱网址导航下载到桌面
  • 长沙正规网站建设价格seo整站优化系统
  • 网站建设网页设计最新热搜新闻
  • 软件开发需要哪些软件seo关键词优化
  • 2023广州疫情二次爆发优化设计电子版
  • 南宁网站建设网站网络推广专员所需知识
  • 合肥网站的建设中国十大互联网公司
  • 中国代理网官网网站seo设计
  • 常州二建建设有限公司官方网站百度的链接
  • 基于python的网站开发项目哪里有网络推广
  • 网站建设开发能力很强的企业培训体系包括四大体系
  • 阜新小程序 阜新网站建设开发网络运营推广具体做什么工作
  • 上海网站托管全网seo优化电话
  • 深圳上市公司网站建设公司竞价账户托管哪家好
  • 常州市网站建设公司网络营销的发展历程
  • 购买网站服务器sem优化服务公司
  • 做英语教具的网站软件开发工具
  • 深圳网站建设与制作公司网络优化的意义
  • 上一篇 下一篇 wordpress网站关键词排名优化工具
  • 揭阳网站制作计划sem竞价代运营
  • 网站制作建设公司哪家好收录提交入口网址
  • 网站建设北京市营销策划的概念
  • 慢慢来建站公司维普网论文收录查询
  • 河北大名网站建设招聘河南搜索引擎优化
  • 耒阳市人民政府门户网站重庆网站推广
  • 网络策划工作内容湖南seo公司
  • 建设一个网站需要那些技术关键词举例