Qt开发websocket服务

 

Qt自带的有网络编程模块,需要再pro文件加上 websockets

# pro 文件
QT       += core gui websockets

 

.h

复制代码
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QWebSocketServer>
#include <QWebSocket>
#include <QDebug>


QT_BEGIN_NAMESPACE
namespace Ui {
class Widget;
}
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

signals:
    void signale_sendToClient(const QByteArray &data);

public slots:
    void sendToClient(const QByteArray &data);
    void onopen();
    void onclose();
    void onMessage(const QString &message);


private:
    Ui::Widget *ui;

    QWebSocketServer *ws = nullptr;
    QList<QWebSocket *> m_clients;
};
#endif // WIDGET_H
复制代码

 

 

.cpp

复制代码
#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    ws = new QWebSocketServer("server", QWebSocketServer::NonSecureMode, this);
    ws->listen(QHostAddress::Any, 36668);
    connect(ws, &QWebSocketServer::newConnection, this, &Widget::onopen);

    showMinimized();
}

Widget::~Widget()
{
    if(ws)
    {
        ws->close();
        ws->deleteLater();
    }

    delete ui;
}

void Widget::sendToClient(const QByteArray &data)
{
    for (QWebSocket *p_client: qAsConst(m_clients))
    {
        p_client->sendTextMessage(QString("send data to client"));
    }
}

void Widget::onopen()
{
    auto p_socket = ws->nextPendingConnection();
    qDebug() << "websocket onopen...";

    connect(p_socket, &QWebSocket::textMessageReceived, this, &Widget::onMessage);
    connect(p_socket, &QWebSocket::disconnected, this, &Widget::onclose);

    m_clients << p_socket;
}

void Widget::onclose()
{
    QWebSocket *p_client = qobject_cast<QWebSocket*>(sender());
    qDebug() << "websocket onclose...";
    if(p_client)
    {
        m_clients.removeAll(p_client);
        p_client->deleteLater();
    }
}

void Widget::onMessage(const QString &message)
{
    // 打印 接受到的消息
    qDebug() << "websocket message:" << message;
}
复制代码

 

posted @   十一的杂文录  阅读(164)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示