将 Qt EchoClient 连接到 https://www.websocket.org/echo.html 时赢得 QAbstractSocket::UnsupportedSocketOperat

Posted

技术标签:

【中文标题】将 Qt EchoClient 连接到 https://www.websocket.org/echo.html 时赢得 QAbstractSocket::UnsupportedSocketOperationError【英文标题】:WIN QAbstractSocket::UnsupportedSocketOperationError while connect Qt EchoClient to https://www.websocket.org/echo.html 【发布时间】:2020-04-23 13:47:48 【问题描述】:

我以 Qt 存储库中的 EchoClient 为例:

https://code.qt.io/cgit/qt/qtwebsockets.git/tree/examples/websockets/echoclient?h=5.14&id=66ea748c2ba1fa35c78c5d55742a982976b07435

我只做了一个修改,我改变了我想连接的 URL 地址:

EchoClient client(QUrl("wss://echo.websocket.org"), true);

它不起作用,预期的结果是 onConnected 回调将触发, 看看下面的代码。

我添加了错误回调:

EchoClient::EchoClient(const QUrl &url, bool debug, QObject *parent) :
    QObject(parent),
    m_url(url),
    m_debug(debug)

    m_webSocket = new QWebSocket;
    if (m_debug)
        qDebug() << "WebSocket server:" << url;
    connect(m_webSocket, &QWebSocket::connected, this, &EchoClient::onConnected);
    connect(m_webSocket, &QWebSocket::disconnected, this, &EchoClient::closed);
    connect(m_webSocket, QOverload<QAbstractSocket::SocketError>::of(&QWebSocket::error),
        [=](QAbstractSocket::SocketError error)
    
        qDebug() << "error: " << error;
    );
    QNetworkRequest request=QNetworkRequest(QUrl(url));
    m_webSocket->open(request);

我看到的是 Qt 总是返回

QAbstractSocket::UnsupportedSocketOperationError (10) QAbstractSocket::SocketError

我做错了什么?这个错误的原因是什么?

【问题讨论】:

在带有 Qt 5.14.2 的 Linux 中,它可以正常工作: WebSocket 服务器:QUrl("wss://echo.websocket.org") WebSocket connected 收到消息:“Hello, world!” @eyllanesc 是的,看来是我的设置有问题,我在 Win8.1 上,到目前为止,我从 Qt 得到了详细描述:此平台不支持 SSL 套接字 见***.com/questions/33141315/… @eyllanesc 是的,我看到了这个,但是根据 DEpendency Walker 我的应用程序不依赖于 ssl.lib,我不想从源代码构建 Qt,所以我继续谷歌搜索 我建议您在您的操作系统上安装 ssl(将其目录添加到环境变量的 PATH 中) 【参考方案1】:

它要求在系统上安装 OpenSSL。 尽管 Qt 安装程序将一些 Open SSL 库放在 Qt\Tools 文件夹中,但这还不足以使其正常工作。

【讨论】:

以上是关于将 Qt EchoClient 连接到 https://www.websocket.org/echo.html 时赢得 QAbstractSocket::UnsupportedSocketOperat的主要内容,如果未能解决你的问题,请参考以下文章

将 qml 信号连接到 Qt

QT:使用移动语义将信号连接到插槽

Qt 5.7 - QWebEngineView - 将 HTML 按钮单击事件连接到 C++/Qt 插槽

将数组连接到 Qt 中的信号槽机制

Qt:如何将不同类的静态信号连接到插槽?

Qt将信号连接到插槽