QWebSocketServer 类

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

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

公共类型

枚举SslMode { SecureMode, NonSecureMode }

公共函数

QWebSocketServer(const QString &serverName, QWebSocketServer::SslMode secureMode, QObject *parent = nullptr)
virtual~QWebSocketServer() override
voidclose()
QWebSocketProtocol::CloseCodeerror() const
QStringerrorString() const
voidhandleConnection(QTcpSocket *socket) const
std::chrono::millisecondshandshakeTimeout() const
inthandshakeTimeoutMS() const
boolhasPendingConnections() const
boolisListening() const
boollisten(const QHostAddress &address = QHostAddress::Any, quint16 port = 0)
intmaxPendingConnections() const
virtual QWebSocket *nextPendingConnection()
voidpauseAccepting()
QNetworkProxyproxy() const
voidresumeAccepting()
QWebSocketServer::SslModesecureMode() const
QHostAddressserverAddress() const
QStringserverName() const
quint16serverPort() const
QUrlserverUrl() const
voidsetHandshakeTimeout(std::chrono::milliseconds msec)
voidsetHandshakeTimeout(int msec)
voidsetMaxPendingConnections(int numConnections)
voidsetProxy(const QNetworkProxy &networkProxy)
voidsetServerName(const QString &serverName)
boolsetSocketDescriptor(qintptr socketDescriptor)
voidsetSslConfiguration(const QSslConfiguration &sslConfiguration)
(since 6.4) voidsetSupportedSubprotocols(const QStringList &protocols)
qintptrsocketDescriptor() const
QSslConfigurationsslConfiguration() const
(since 6.4) QStringListsupportedSubprotocols() const
QList<QWebSocketProtocol::Version>supportedVersions() const

信号

voidacceptError(QAbstractSocket::SocketError socketError)
(since 6.2) voidalertReceived(QSsl::AlertLevel level, QSsl::AlertType type, const QString &description)
(since 6.2) voidalertSent(QSsl::AlertLevel level, QSsl::AlertType type, const QString &description)
voidclosed()
(since 6.2) voidhandshakeInterruptedOnError(const QSslError &error)
voidnewConnection()
voidoriginAuthenticationRequired(QWebSocketCorsAuthenticator *authenticator)
voidpeerVerifyError(const QSslError &error)
voidpreSharedKeyAuthenticationRequired(QSslPreSharedKeyAuthenticator *authenticator)
voidserverError(QWebSocketProtocol::CloseCode closeCode)
voidsslErrors(const QList<QSslError> &errors)

详细说明

它仿照 QTcpServer 进行设计,行为相同。因此,如果您熟悉使用 QTcpServer,您也就知道如何使用 QWebSocketServer。此类使您能够接受传入的 WebSocket 连接。您可以为端口指定端口或将 QWebSocketServer 选择一个端口。您可以在特定地址上或在计算机的所有地址上监听。通过调用 listen() 来让服务器监听传入连接。

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

如发生错误,serverError() 返回错误类型,并可以通过调用 errorString() 获得发生的描述。

在监听连接时,服务器正在监听的地址和端口是作为 serverAddress() 和 serverPort() 可用的。

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

QWebSocketServer 目前不支持 WebSocket 扩展

注意:当使用自签名证书时,Firefox 故障 594502 阻止 Firefox 连接到安全的 WebSocket 服务器。要解决这个问题,首先使用 HTTPS 浏览到安全的 WebSocket 服务器。Firefox 将指证书无效。从现在开始,可以将证书添加到例外中。之后,安全的 WebSocket 连接应该可以工作。

QWebSocketServer 只支持 WebSocket 协议的第 13 版,如 RFC 6455 所述。

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

另请参阅 WebSocket 服务器示例QWebSocket.

成员类型文档

枚举 QWebSocketServer::SslMode

指示服务器是否通过 wss (安全模式) 或 ws (非安全模式) 运行

常数描述
QWebSocketServer::SecureMode0服务器在安全模式下运行(通过 wss)
QWebSocketServer::NonSecureMode1服务器在非安全模式下运行(通过 ws)

成员函数文档

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

使用给定的 serverName 构造新的 QWebSocketServer。在 HTTP 握手阶段将使用 serverName 来标识服务器。它可以是空的,在这种情况下,不会向客户端发送服务器名称。参数 secureMode 指示服务器是否在 wss (SecureMode) 或 ws (NonSecureMode) 上运行。

parent 传递给 QObject 构造函数。

[重写虚函数 noexcept] QWebSocketServer::~QWebSocketServer()

销毁 QWebSocketServer 对象。如果服务器正在监听连接,套接字将自动关闭。任何仍在队列中的客户端 QWebSocket 将关闭并删除。

另请参阅 close()。

[信号] void QWebSocketServer::acceptError(QAbstractSocket::SocketError socketError)

当新连接的接受导致错误时发出此信号。参数 socketError 描述了发生错误的类型。

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

[信号,自 6.2 版起] void QWebSocketServer::alertReceived(QSsl::AlertLevel level, QSsl::AlertType type, const QString &description)

如果从对等方收到警告消息,则 QWebSocketServer 会发出此信号。level 告知警告是致命的还是警告。type 是解释为什么发送警告的代码。当可用时,警告消息的文本描述将在 description 中提供。

注意: 此信号主要用于信息和调试目的,不需要在应用程序中进行处理。如果警告是致命的,底层后端将处理它并关闭连接。

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

此功能是在 Qt 6.2 版本中引入的。

另请参阅 alertSent()、QSsl::AlertLevelQSsl::AlertType

[信号,自6.2以来] void QWebSocketServer::alertSent(QSsl::AlertLevel level, QSsl::AlertType type, const QString &description)

QWebSocketServer 会发射此信号,如果向对方发送了警报消息。 level 描述了是否为警告或致命错误。 type 提供了警报消息的代码。当可用的警报消息的文本描述时,它将包含在 description 中。

注意:此信号主要用于信息提示,可用来进行调试,通常不需要应用程序采取任何操作。

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

此功能是在 Qt 6.2 版本中引入的。

另请参阅:alertReceived (),QSsl::AlertLevelQSsl::AlertType

void QWebSocketServer::close()

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

[信号] void QWebSocketServer::closed()

当服务器关闭其连接时,会发射此信号。

另请参阅 close()。

QWebSocketProtocol::CloseCode QWebSocketServer::error() const

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

另请参阅:errorString ()。

QString QWebSocketServer::errorString() const

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

另请参阅:serverError ()。

void QWebSocketServer::handleConnection(QTcpSocket *socket) const

将tcp socket 升级为websocket。

QWebSocketServer 对象将获取socket对象的拥有权,并在适当的时候删除它。

[信号,自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().

[信号] void QWebSocketServer::newConnection()

每次有新连接可用时都会发出此信号。

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

[虚函数] QWebSocket *QWebSocketServer::nextPendingConnection()

返回下一个挂起的连接作为一个已连接的 QWebSocket 对象。QWebSocketServer 不拥有返回的 QWebSocket 对象。调用者负责在不再使用对象时显式删除对象,否则会发生内存泄漏。如果没有挂住的连接而调用此函数,则返回 nullptr。

注意:返回的 QWebSocket 对象无法从另一个线程使用。

另请参阅 hasPendingConnections().

[信号] void QWebSocketServer::originAuthenticationRequired(QWebSocketCorsAuthenticator *authenticator)

当请求新的连接时发出此信号。连接到此信号的槽应该指出是否允许源(可以通过 origin() 调用确定)在 authenticator 对象中被接受(通过发出 setAllowed)。

如果没有槽连接到此信号,则默认接受所有源。

注意: 无法使用队列连接来连接到该信号,因为连接总是会成功。

void QWebSocketServer::pauseAccepting()

暂停接收新的连接。队列中的连接将保持排队。

另请参阅 resumeAccepting

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

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

此信号在出现问题早期为您提供指示。通过连接到此信号,可以在握手完成之前,在连接的槽内部手动选择断开连接。如果不采取任何操作,则 QWebSocketServer 将继续发出 QWebSocketServer::sslErrors

另请参阅 sslErrors

[信号] 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().

[信号] 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 将发出包含 QWebSocketProtocol::CloseCodeAbnormalDisconnection 关闭代码的 error() 信号。WebSocket 握手将失败,套接字将被关闭。

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

void QWebSocketServer::setProxy(const QNetworkProxy &networkProxy)

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

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

server->setProxy(QNetworkProxy::NoProxy);

另请参阅proxy().

void QWebSocketServer::setServerName(const QString &serverName)

设置在HTTP握手阶段使用的服务器名称为提供的serverName。如果serverName为空,则将发送空服务器名称到客户端。现有的已连接客户端不会收到此更改的通知,只有新连接的客户端会看到这个新名称。

另请参阅 serverName

bool QWebSocketServer::setSocketDescriptor(qintptr socketDescriptor)

将服务器监听传入连接的套接字描述符设置为socketDescriptor

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

另请参阅 socketDescriptorisListening

void QWebSocketServer::setSslConfiguration(const QSslConfiguration &sslConfiguration)

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

另请参阅 sslConfigurationSslMode

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

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

此功能是在Qt 6.4中引入的。

另请参阅 supportedSubprotocols

qintptr QWebSocketServer::socketDescriptor() const

返回服务器用于监听传入指令的本地套接字描述符,如果服务器没有监听则返回-1。如果服务器使用QNetworkProxy,则返回的描述符可能无法与本地套接字功能一起使用。

另请参阅 setSocketDescriptorisListening

QSslConfiguration QWebSocketServer::sslConfiguration() const

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

另请参阅 setSslConfigurationSslModeQSslConfiguration::defaultConfiguration

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

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

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

另请参阅 peerVerifyError().

[自 6.4以来] QStringList QWebSocketServer::supportedSubprotocols() const

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

此功能是在Qt 6.4中引入的。

另请参阅 setSupportedSubprotocols().

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

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

© 2024 Qt公司有限公司。本文件中包含的文档贡献版权属于各自的所有者。本文件提供的文档根据自由软件基金会发布的GNU自由文档许可协议第1.3版进行许可。 Qt和相应的徽标是芬兰 Qt公司及其它在世界各地注册的商标。所有其他商标均为它们各自所有者的财产。