Qt实现websocket通信——服务端

这是一个使用Qt库实现的WebSocket服务器,它监听本地8088端口,接收并处理新的连接,当有文本或二进制消息接收到时,会发出信号。在发生错误时,服务器会打印错误信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 1、头文件

#ifndef WEBSOCKETSERVER_H
#define WEBSOCKETSERVER_H

#include <QObject>
#include <QWebSocketServer>
#include <QWebSocket>

class WebSocketServer : public QObject
{
    Q_OBJECT
public:
    explicit WebSocketServer(QObject *parent = nullptr);
    ~WebSocketServer();

signals:
    void msgReceived(const QString &msg);

private slots:
    void onNewConnection(void);
    void onDisconnected(void);
    void onErrorOccurred(QAbstractSocket::SocketError socketError);

private:
    QWebSocket * m_socket;
    QWebSocketServer * m_server;
};

#endif // WEBSOCKETSERVER_H

2、源码文件

#include "websocketserver.h"
#include <QHostAddress>

WebSocketServer::WebSocketServer(QObject *parent)
    : QObject{parent}
{
    m_socket = nullptr;
    m_server = new QWebSocketServer("server", QWebSocketServer::NonSecureMode, this);
    if(m_server->listen(QHostAddress::LocalHost, 8088))
    {
        connect(m_server, &QWebSocketServer::newConnection, this, &WebSocketServer::onNewConnection);
    }
}

WebSocketServer::~WebSocketServer()
{
    onDisconnected();
    if(nullptr != m_server)
    {
        m_server->disconnect();
        m_server->close();
        delete m_server;
        m_server = nullptr;
    }
}

void WebSocketServer::onNewConnection(void)
{
    if(nullptr != m_server)
    {
        onDisconnected();
        m_socket = m_server->nextPendingConnection();
        if(nullptr != m_socket)
        {
            connect(m_socket, &QWebSocket::disconnected, this, &WebSocketServer::onDisconnected);
            connect(m_socket, &QWebSocket::textMessageReceived, this, [=](const QString &msg){
                emit msgReceived(msg);
            });
            connect(m_socket, &QWebSocket::binaryMessageReceived, this, [=](const QByteArray &msg){
                emit msgReceived(msg);
            });
            connect(m_socket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(onErrorOccurred(QAbstractSocket::SocketError)));
        }
    }
}

void WebSocketServer::onDisconnected()
{
    if(nullptr != m_socket)
    {
        m_socket->disconnect();
        delete m_socket;
        m_socket = nullptr;
    }
}

void WebSocketServer::onErrorOccurred(QAbstractSocket::SocketError socketError)
{
    qDebug()<<QString("Websocketserver error(%1): ").arg(socketError)<<m_socket->errorString();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值