ZBLOG

理解错了我的意思,是QWebSocketServer在服务端启动服务,QWebSocket在客户端连接服务端,两端要都能正确捕获及处理连接信号及接收数据信号,重点是QWebSocketServer服务是在动态库中实现的,目前QWebSocket连接时双放都捕获不到信号

非常抱歉理解错了你的问题。如果在动态库中实现 QWebSocketServer,并且在应用程序中使用 QWebSocket 连接到该服务,确保双方都能正确捕获和处理信号,可以按照以下步骤进行:

在动态库中实现 QWebSocketServer:

#include <QObject>
#include <QtWebSockets/QWebSocketServer>

class MyServer : public QObject
{
    Q_OBJECT

public:
    explicit MyServer(QObject *parent = nullptr);

public slots:
    void onNewConnection();
    void onTextMessageReceived(const QString &message);
    void onSocketDisconnected();

signals:
    void connected();
    void textMessageReceived(const QString &message);
};

MyServer::MyServer(QObject *parent) : QObject(parent)
{
    QWebSocketServer* server = new QWebSocketServer("My Server", QWebSocketServer::NonSecureMode, this);

    if (!server->listen(QHostAddress::Any, 1234)) {
        // 处理启动服务失败的情况
        return;
    }

    connect(server, &QWebSocketServer::newConnection, this, &MyServer::onNewConnection);
}

void MyServer::onNewConnection()
{
    QWebSocket* socket = server->nextPendingConnection();
  
    connect(socket, &QWebSocket::textMessageReceived, this, &MyServer::onTextMessageReceived);
  
    connect(socket, &QWebSocket::disconnected, this, &MyServer::onSocketDisconnected);

   emit connected(); // 发送连接成功信号
}

void MyServer::onTextMessageReceived(const QString& message)
{
   emit textMessageReceived(message); // 发送收到消息信号
}

void MyServer::onSocketDisconnected()
{
    QWebSocket* socket = qobject_cast<QWebSocket*>(sender());
  
    // 处理断开连接

    socket->deleteLater();
}

在应用程序中使用 QWebSocket 连接到动态库的服务:

#include <QObject>
#include <QtWebSockets/QWebSocket>

class MyApp : public QObject
{
    Q_OBJECT

public:
    explicit MyApp(QObject *parent = nullptr);

public slots:
    void onConnected();
    void onTextMessageReceived(const QString& message);
};

MyApp::MyApp(QObject *parent) : QObject(parent)
{
   QWebSocket* socket = new QWebSocket();

   connect(socket, &QWebSocket::connected, this, &MyApp::onConnected);
   connect(socket, &QWebSocket::textMessageReceived, this, &MyApp::onTextMessageReceived);

   socket->open(QUrl("ws://localhost:1234")); // 替换为正确的服务器地址和端口
}

void MyApp::onConnected()
{
   // 连接成功后可以发送消息给服务端或者进行其他操作
}

void MyApp::onTextMessageReceived(const QString& message)
{
   // 处理从服务端收到的消息
}

请确保在应用程序中正确创建并实例化 MyApp 类,以便能够连接到动态库的服务,并处理相关信号。同时,请将 ws://localhost:1234 替换为正确的服务器地址和端口。

希望这次能满足你的需求,如有其他问题,请随时提问。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=10667

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?