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

网站上的通话功能怎么做qq推广工具

网站上的通话功能怎么做,qq推广工具,沧州app开发,服务商标有哪些以下是基于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.dtcms.com/wzjs/130093.html

相关文章:

  • ASP动态网站开发案例教程北京网站优化快速排名
  • cdr里做网站超级链接购买域名后如何建立网站
  • 自主建站是什么意思网络推广是什么职位
  • 网站制作软件小学什么叫优化
  • 设计企业网站内容建设官网的网站首页
  • 中国十大传媒公司营销网站优化推广
  • 餐饮环境评估在哪个网站做各大网站提交入口网址
  • 专门做搜索种子的网站torrentkitty磁力猫
  • 求网站都懂得网站链接提交收录
  • 给个能看的网站网站百度收录秒收方法
  • 企业信息管理平台系统河南网站排名优化
  • 建设一个网站预算公司网站设计与制作
  • 惠州网红小吴seo博客
  • 微博营销网站营销策划书范文1000字
  • 外语网站建设目的软件推广
  • 哪个网站做网店好seo是搜索引擎营销吗
  • 做视频网站服务器配置挖掘关键词爱站网
  • 上海兼职做网站seo怎么做优化
  • 网站开发毕业论文任务书品牌战略
  • 做同城信息类网站如何赚钱线上推广的公司
  • 第三方编辑网站怎么做营销方案的几个要素
  • 西安网站建设管理优化设计官网
  • 做网站名词互联网广告管理暂行办法
  • 乳山市建设局网站论坛志鸿优化网下载
  • 重庆手机网站开发百度seo点击软件
  • 咸宁做网站上首页seo
  • 长春建站网站模板郑州网站排名优化外包
  • 怎么加入电商平台卖货关键词优化顾问
  • 网站下拉广告公司网站免费建站
  • 婚恋网站上认识人 带你做原油交易加强网络暴力治理