QWebSocketServer Class

实现基于 WebSocket 的服务器。更多

头文件: #include <QWebSocketServer>
CMake: find_package(Qt6 REQUIRED COMPONENTS WebSockets)
target_link_libraries(mytarget PRIVATE Qt6::WebSockets)
qmake: QT += websockets
继承: QObject

公共类型

enum SslMode { SecureMode, NonSecureMode }

公共函数

QWebSocketServer(const QString &serverName, QWebSocketServer::SslMode secureMode, QObject *parent = nullptr)
virtual ~QWebSocketServer() override
void close()
QWebSocketProtocol::CloseCode error() const
QString errorString() const
void handleConnection(QTcpSocket *socket) const
std::chrono::milliseconds handshakeTimeout() const
int handshakeTimeoutMS() const
bool hasPendingConnections() const
bool isListening() const
bool listen(const QHostAddress &address = QHostAddress::Any, quint16 port = 0)
int maxPendingConnections() const
virtual QWebSocket *nextPendingConnection()
void pauseAccepting()
QNetworkProxy proxy() const
void resumeAccepting()
QWebSocketServer::SslMode secureMode() const
QHostAddress serverAddress() const
QString serverName() const
quint16 serverPort() const
QUrl serverUrl() const
void setHandshakeTimeout(std::chrono::milliseconds msec)
void setHandshakeTimeout(int msec)
void setMaxPendingConnections(int numConnections)
void setProxy(const QNetworkProxy &networkProxy)
void setServerName(const QString &serverName)
bool setSocketDescriptor(qintptr socketDescriptor)
void setSslConfiguration(const QSslConfiguration &sslConfiguration)
(since 6.4) void setSupportedSubprotocols(const QStringList &protocols)
qintptr socketDescriptor() const
QSslConfiguration sslConfiguration() const
(since 6.4) QStringList supportedSubprotocols() const
QList<QWebSocketProtocol::Version> supportedVersions() const

信号

void acceptError(QAbstractSocket::SocketError socketError)
(since 6.2) void alertReceived(QSsl::AlertLevel level, QSsl::AlertType type, const QString &description)
(since 6.2) void alertSent(QSsl::AlertLevel level, QSsl::AlertType type, const QString &description)
void closed()
(since 6.2) void handshakeInterruptedOnError(const QSslError &error)
void newConnection()
void originAuthenticationRequired(QWebSocketCorsAuthenticator *authenticator)
void peerVerifyError(const QSslError &error)
void preSharedKeyAuthenticationRequired(QSslPreSharedKeyAuthenticator *authenticator)
void serverError(QWebSocketProtocol::CloseCode closeCode)
void sslErrors(const QList<QSslError> &errors)

详细说明

QWebSocketServer 以QTcpServer 为模型,行为方式相同。因此,如果你知道如何使用QTcpServer ,你就知道如何使用 QWebSocketServer。该类可以接受传入的 WebSocket 连接。你可以指定端口,也可以让 QWebSocketServer 自动选择端口。您可以监听特定地址,也可以监听所有机器的地址。调用listen() 可让服务器监听传入连接。

每次客户端连接到服务器时,都会发出newConnection() 信号。调用nextPendingConnection() 接受挂起的连接作为已连接的QWebSocket 。函数会返回一个指向QAbstractSocket::ConnectedStateQWebSocket 的指针,您可以使用该指针与客户端通信。

如果发生错误,serverError() 会返回错误类型,调用errorString() 可以获得关于发生错误的可读描述。

在监听连接时,服务器监听的地址和端口可通过serverAddress() 和serverPort() 获得。

调用close() 会使 QWebSocketServer 停止监听传入连接。

QWebSocketServer 目前不支持WebSocket 扩展

注意: 在使用自签名证书时,Firefox bug 594502会阻止Firefox连接到安全的 WebSocket 服务器。要解决这个问题,首先使用 HTTPS 浏览安全 WebSocket 服务器。FireFox 会提示证书无效。从现在起,可以将证书添加到例外情况中。之后,安全 WebSockets 连接就能正常工作了。

QWebSocketServer 仅支持RFC 6455 中概述的 WebSocket 协议第 13 版。

默认的连接握手超时时间为 10 秒,以避免拒绝服务,可使用setHandshakeTimeout() 对超时时间进行自定义。

另请参阅 WebSocket 服务器示例QWebSocket

成员类型文档

enum QWebSocketServer::SslMode

表示服务器通过 wss(安全模式)还是 ws(非安全模式)运行

常数说明
QWebSocketServer::SecureMode0服务器以安全模式运行(通过 wss)
QWebSocketServer::NonSecureMode1服务器以非安全模式运行(通过 ws)

成员函数文档

[explicit] QWebSocketServer::QWebSocketServer(const QString &serverName, QWebSocketServer::SslMode secureMode, QObject *parent = nullptr)

使用给定的serverName 构建一个新的 QWebSocketServer。serverName 将在 HTTP 握手阶段用于识别服务器。它可以为空,在这种情况下,将不会向客户端发送服务器名称。secureMode 参数表示服务器是通过 wss (SecureMode) 还是通过 ws (NonSecureMode) 运行。

parent 传递给 构造函数。QObject

[override virtual noexcept] QWebSocketServer::~QWebSocketServer()

销毁QWebSocketServer 对象。如果服务器正在监听连接,则会自动关闭套接字。任何仍在排队的客户端QWebSocket都会被关闭和删除。

另请参阅 close().

[signal] void QWebSocketServer::acceptError(QAbstractSocket::SocketError socketError)

当接受新连接时出现错误,就会发出该信号。socketError 参数描述了发生错误的类型。

另请参阅 pauseAccepting() 和resumeAccepting()。

[signal, since 6.2] void QWebSocketServer::alertReceived(QSsl::AlertLevel level, QSsl::AlertType type, const QString &description)

QWebSocketServer level type 是解释发送警报原因的代码。如果有关于警报信息的文字说明,则在 中提供。description

注意: 该信号主要用于提供信息和调试,不需要在应用程序中进行任何处理。如果警报是致命的,底层后端会进行处理并关闭连接。

注意: 并非所有后端都支持此功能。

此函数在 Qt 6.2 中引入。

另请参阅 alertSent(),QSsl::AlertLevel, 和QSsl::AlertType

[signal, since 6.2] void QWebSocketServer::alertSent(QSsl::AlertLevel level, QSsl::AlertType type, const QString &description)

QWebSocketServer level 描述了是警告还是致命错误。 给出了警报信息的代码。如果有警报信息的文本描述,则在 中提供。type description

注意: 该信号主要是信息性的,可用于调试目的,通常不要求应用程序执行任何操作。

注意: 并非所有后端都支持此功能。

此函数在 Qt 6.2 中引入。

另请参阅 alertReceived(),QSsl::AlertLevel, 和QSsl::AlertType

void QWebSocketServer::close()

关闭服务器。服务器将不再侦听传入连接。

[signal] void QWebSocketServer::closed()

服务器关闭连接时发出该信号。

另请参阅 close().

QWebSocketProtocol::CloseCode QWebSocketServer::error() const

返回上次出错的错误代码。如果没有错误发生,则返回QWebSocketProtocol::CloseCodeNormal

另请参阅 errorString() 。

QString QWebSocketServer::errorString() const

返回对上次发生的错误的可读描述。如果未发生错误,则返回空字符串。

另请参阅 serverError()。

void QWebSocketServer::handleConnection(QTcpSocket *socket) const

将 tcpsocket 升级为 websocket。

QWebSocketServer 对象将获得 socket 对象的所有权,并在适当的时候将其删除。

[signal, since 6.2] void QWebSocketServer::handshakeInterruptedOnError(const QSslError &error)

QWebSocketServer 如果发现证书验证 ,并且在 中启用了早期错误报告功能,则会发出此信号。error QSslConfiguration

此函数在 Qt 6.2 中引入。

另请参阅 sslErrors() 和QSslConfiguration::setHandshakeMustInterruptOnError()。

std::chrono::milliseconds QWebSocketServer::handshakeTimeout() const

返回新连接的握手超时(毫秒)。

默认为 10 秒。如果对等方用了更多时间完成握手,其连接将被关闭。

另请参阅 setHandshakeTimeout() 和handshakeTimeoutMS()。

int QWebSocketServer::handshakeTimeoutMS() const

返回新连接的握手超时(毫秒)。

默认为 10 秒。如果对等方用了更多时间完成握手,其连接将被关闭。

另请参阅 setHandshakeTimeout() 和handshakeTimeout()。

bool QWebSocketServer::hasPendingConnections() const

如果服务器有待处理连接,则返回 true;否则返回 false。

另请参阅 nextPendingConnection() 和setMaxPendingConnections()。

bool QWebSocketServer::isListening() const

如果服务器正在监听传入连接,则返回 true;否则返回 false。如果监听失败,error() 将返回原因。

另请参阅 listen() 和error()。

bool QWebSocketServer::listen(const QHostAddress &address = QHostAddress::Any, quint16 port = 0)

告诉服务器监听地址address 和端口port 上的传入连接。如果port 为 0,则会自动选择一个端口。如果addressQHostAddress::Any ,服务器将监听所有网络接口。

成功时返回 true,否则返回 false。

另请参阅 isListening() 。

int QWebSocketServer::maxPendingConnections() const

返回待接受连接的最大数量。默认为 30。

另请参阅 setMaxPendingConnections() 和hasPendingConnections()。

[signal] void QWebSocketServer::newConnection()

每次有新连接时都会发出该信号。

另请参阅 hasPendingConnections() 和nextPendingConnection()。

[virtual] QWebSocket *QWebSocketServer::nextPendingConnection()

将下一个待处理连接作为已连接的QWebSocket 对象返回。QWebSocketServer 不拥有返回的QWebSocket 对象的所有权。如果在没有待处理连接时调用此函数,则返回 nullptr。

注意:返回的QWebSocket 对象不能在其他线程中使用。

另请参阅 hasPendingConnections()。

[signal] void QWebSocketServer::originAuthenticationRequired(QWebSocketCorsAuthenticator *authenticator)

请求新连接时会发出该信号。连接到此信号的插槽应指示authenticator 对象是否允许使用起源(可通过调用 origin() 确定)(通过发布setAllowed() )。

如果该信号未连接任何插槽,则默认接受所有起源。

注意: 不能使用 QueuedConnection 连接到此信号,因为连接总是会成功。

void QWebSocketServer::pauseAccepting()

暂停接收新连接。队列中的连接将保留在队列中。

另请参阅 resumeAccepting()。

[signal] void QWebSocketServer::peerVerifyError(const QSslError &error)

QWebSocketServer 可以在 SSL 握手过程中,在加密建立之前多次发出该信号,以表明在建立对等方身份时发生了错误。 通常表明 无法安全地识别对等方。error QWebSocketServer

当出现问题时,该信号可为您提供早期提示。通过连接到该信号,您可以在握手完成前从连接的插槽内手动选择中断连接。如果不采取任何行动,QWebSocketServer 将继续发送QWebSocketServer::sslErrors().

另请参阅 sslErrors()。

[signal] void QWebSocketServer::preSharedKeyAuthenticationRequired(QSslPreSharedKeyAuthenticator *authenticator)

QWebSocketServer 在协商 PSK 密码套件时,服务器会发出这个信号,因此需要进行 PSK 验证。

使用 PSK 时,客户端必须向服务器发送有效的身份信息和有效的预共享密钥,才能继续 SSL 握手。应用程序可以根据自己的需要,通过填写传递的authenticator 对象,在与该信号相连的插槽中提供这些信息。

注: 忽略此信号或未提供所需凭证将导致握手失败,从而中止连接。

注: authenticator 对象为套接字所有,应用程序不得删除。

另请参阅 QSslPreSharedKeyAuthenticatorQSslSocket::preSharedKeyAuthenticationRequired()。

QNetworkProxy QWebSocketServer::proxy() const

返回此服务器的网络代理。默认情况下使用QNetworkProxy::DefaultProxy

另请参阅 setProxy().

void QWebSocketServer::resumeAccepting()

恢复接受新连接。

另请参见 pauseAccepting().

QWebSocketServer::SslMode QWebSocketServer::secureMode() const

返回服务器运行的安全模式。

另请参阅 QWebSocketServer() 和SslMode

QHostAddress QWebSocketServer::serverAddress() const

如果服务器正在监听连接,则返回服务器地址;否则返回QHostAddress::Null

另请参阅 serverPort() 和listen()。

[signal] void QWebSocketServer::serverError(QWebSocketProtocol::CloseCode closeCode)

当 WebSocket 连接设置过程中发生错误时会发出该信号。closeCode 参数描述了发生错误的类型。

另请参阅 errorString().

QString QWebSocketServer::serverName() const

返回在 http 握手阶段使用的服务器名称。

另请参阅 setServerName()。

quint16 QWebSocketServer::serverPort() const

如果服务器正在监听连接,则返回服务器的端口;否则返回 0。

另请参阅 serverAddress() 和listen()。

QUrl QWebSocketServer::serverUrl() const

如果服务器正在监听连接,则返回客户端可用于连接该服务器的 URL。否则将返回无效 URL。

另请参阅 serverPort()、serverAddress() 和listen()。

void QWebSocketServer::setHandshakeTimeout(std::chrono::milliseconds msec)

将新连接的握手超时设置为msec 毫秒。

默认设置为 10 秒。如果对等方用了更多时间完成握手,其连接将被关闭。可以通过负值(如-1)来禁用超时。

另请参阅 handshakeTimeout() 和handshakeTimeoutMS()。

void QWebSocketServer::setHandshakeTimeout(int msec)

这是一个重载函数。

void QWebSocketServer::setMaxPendingConnections(int numConnections)

设置numConnections 的最大待接受连接数。在调用nextPendingConnection() 之前,WebSocketServer 接受的传入连接数不会超过numConnections 。默认情况下,上限为 30 个待处理连接。

QWebSocketServer 当达到最大连接数时,将发出带有 关闭代码的 () 信号。WebSocket 握手失败,套接字将被关闭。QWebSocketProtocol::CloseCodeAbnormalDisconnection error

另请参阅 maxPendingConnections() 和hasPendingConnections()。

void QWebSocketServer::setProxy(const QNetworkProxy &networkProxy)

将此服务器的显式网络代理设置为networkProxy

要禁用代理,请使用QNetworkProxy::NoProxy 代理类型:

server->setProxy(QNetworkProxy::NoProxy);

另请参阅 proxy() 。

void QWebSocketServer::setServerName(const QString &serverName)

将 HTTP 握手阶段使用的服务器名称设置为给定的serverNameserverName 可以为空,在这种情况下,将向客户端发送一个空服务器名称。现有连接的客户端不会收到通知,只有新连接的客户端才会看到这个新名称。

另请参阅 serverName() 。

bool QWebSocketServer::setSocketDescriptor(qintptr socketDescriptor)

设置服务器在监听socketDescriptor 的传入连接时应使用的套接字描述符。

如果套接字设置成功,则返回 true;否则返回 false。假设套接字处于侦听状态。

另请参阅 socketDescriptor() 和isListening()。

void QWebSocketServer::setSslConfiguration(const QSslConfiguration &sslConfiguration)

QWebSocketServer 的 SSL 配置设置为sslConfiguration 。如果QWebSocketServer 以非安全模式运行 (QWebSocketServer::NonSecureMode) ,则此方法无效。

另请参阅 sslConfiguration() 和SslMode

[since 6.4] void QWebSocketServer::setSupportedSubprotocols(const QStringList &protocols)

将服务器支持的协议列表设置为protocols

此函数在 Qt 6.4 中引入。

另请参阅 supportedSubprotocols()。

qintptr QWebSocketServer::socketDescriptor() const

返回服务器用于侦听传入指令的本地套接字描述符,如果服务器未侦听,则返回-1。如果服务器使用QNetworkProxy ,返回的描述符可能无法使用本地套接字函数。

另请参阅 setSocketDescriptor() 和isListening()。

QSslConfiguration QWebSocketServer::sslConfiguration() const

返回QWebSocketServer 使用的 SSL 配置。如果服务器未在安全模式下运行 (QWebSocketServer::SecureMode),则此方法返回QSslConfiguration::defaultConfiguration()。

另请参阅 setSslConfiguration(),SslMode, 和QSslConfiguration::defaultConfiguration().

[signal] void QWebSocketServer::sslErrors(const QList<QSslError> &errors)

QWebSocketServer 在 SSL 握手后发出此信号,表明在建立对等方身份时发生了一个或多个错误。这些错误通常表明 无法安全地识别对等方。除非采取任何措施,否则连接将在此信号发出后中断。QWebSocketServer

errors 包含一个或多个阻止 验证对等方身份的错误。QSslSocket

另请参阅 peerVerifyError() 。

[since 6.4] QStringList QWebSocketServer::supportedSubprotocols() const

返回服务器支持的协议列表。

此函数在 Qt 6.4 中引入。

另请参阅 setSupportedSubprotocols()。

QList<QWebSocketProtocol::Version> QWebSocketServer::supportedVersions() const

返回该服务器支持的 WebSocket 版本列表。

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.