QWebSocketServer Class

Implementiert einen WebSocket-basierten Server. Mehr...

Kopfzeile: #include <QWebSocketServer>
CMake: find_package(Qt6 REQUIRED COMPONENTS WebSockets)
target_link_libraries(mytarget PRIVATE Qt6::WebSockets)
qmake: QT += websockets
Vererbungen: QObject

Öffentliche Typen

enum SslMode { SecureMode, NonSecureMode }

Öffentliche Funktionen

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

Signale

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)

Detaillierte Beschreibung

Es ist nach QTcpServer modelliert und verhält sich auch so. Wenn Sie also wissen, wie man QTcpServer benutzt, wissen Sie auch, wie man QWebSocketServer benutzt. Diese Klasse ermöglicht es, eingehende WebSocket-Verbindungen zu akzeptieren. Sie können den Port angeben oder QWebSocketServer automatisch einen auswählen lassen. Sie können auf eine bestimmte Adresse oder auf alle Adressen des Rechners hören. Rufen Sie listen() auf, damit der Server auf eingehende Verbindungen wartet.

Das Signal newConnection() wird dann jedes Mal ausgegeben, wenn sich ein Client mit dem Server verbindet. Rufen Sie nextPendingConnection() auf, um die anstehende Verbindung als eine verbundene QWebSocket zu akzeptieren. Die Funktion gibt einen Zeiger auf einen QWebSocket in QAbstractSocket::ConnectedState zurück, den Sie für die Kommunikation mit dem Client verwenden können.

Wenn ein Fehler auftritt, gibt serverError() die Art des Fehlers zurück, und errorString() kann aufgerufen werden, um eine von Menschen lesbare Beschreibung des Vorfalls zu erhalten.

Wenn auf Verbindungen gewartet wird, sind die Adresse und der Port, auf dem der Server lauscht, als serverAddress() und serverPort() verfügbar.

Der Aufruf von close() lässt QWebSocketServer aufhören, auf eingehende Verbindungen zu warten.

QWebSocketServer unterstützt derzeit keine WebSocket-Erweiterungen.

Hinweis: Wenn Sie mit selbstsignierten Zertifikaten arbeiten, verhindert der Firefox-Bug 594502, dass Firefox sich mit einem sicheren WebSocket-Server verbindet. Um dieses Problem zu umgehen, rufen Sie zunächst den sicheren WebSocket-Server mit HTTPS auf. FireFox zeigt dann an, dass das Zertifikat ungültig ist. Von hier aus kann das Zertifikat zu den Ausnahmen hinzugefügt werden. Danach sollte die sichere WebSockets-Verbindung funktionieren.

QWebSocketServer unterstützt nur Version 13 des WebSocket-Protokolls, wie es in RFC 6455 beschrieben ist.

Es gibt ein standardmäßiges Verbindungs-Handshake-Timeout von 10 Sekunden, um Denial-of-Service zu vermeiden, das mit setHandshakeTimeout() angepasst werden kann.

Siehe auch WebSocket Server Example und QWebSocket.

Dokumentation der Mitgliedstypen

enum QWebSocketServer::SslMode

Gibt an, ob der Server über wss (SecureMode) oder ws (NonSecureMode) arbeitet

KonstanteWertBeschreibung
QWebSocketServer::SecureMode0Der Server arbeitet im sicheren Modus (über wss)
QWebSocketServer::NonSecureMode1Der Server arbeitet im nicht-sicheren Modus (über ws)

Dokumentation der Mitgliedsfunktionen

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

Konstruiert einen neuen QWebSocketServer mit der angegebenen serverName. Die serverName wird in der HTTP-Handshake-Phase verwendet, um den Server zu identifizieren. Er kann leer sein, in diesem Fall wird kein Servername an den Client gesendet. Der Parameter secureMode gibt an, ob der Server über wss (SecureMode) oder über ws (NonSecureMode) arbeitet.

parent wird an den QObject Konstruktor übergeben.

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

Zerstört das Objekt QWebSocketServer. Wenn der Server auf Verbindungen wartet, wird der Socket automatisch geschlossen. Alle noch in der Warteschlange stehenden Clients QWebSocketwerden geschlossen und gelöscht.

Siehe auch close().

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

Dieses Signal wird ausgegeben, wenn bei der Annahme einer neuen Verbindung ein Fehler auftritt. Der Parameter socketError beschreibt die Art des aufgetretenen Fehlers.

Siehe auch pauseAccepting() und resumeAccepting().

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

QWebSocketServer sendet dieses Signal, wenn eine Warnmeldung von einer Gegenstelle eingegangen ist. level gibt an, ob es sich um eine schwerwiegende oder um eine Warnung handelt. type ist der Code, der erklärt, warum die Warnmeldung gesendet wurde. Wenn eine textuelle Beschreibung der Warnmeldung verfügbar ist, wird sie in description angegeben.

Hinweis: Das Signal dient hauptsächlich zu Informations- und Debugging-Zwecken und erfordert keine Behandlung in der Anwendung. Wenn der Alarm fatal war, wird das zugrundeliegende Backend ihn behandeln und die Verbindung schließen.

Hinweis: Nicht alle Backends unterstützen diese Funktionalität.

Diese Funktion wurde in Qt 6.2 eingeführt.

Siehe auch alertSent(), QSsl::AlertLevel, und QSsl::AlertType.

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

QWebSocketServer gibt dieses Signal aus, wenn eine Warnmeldung an einen Peer gesendet wurde. level beschreibt, ob es sich um eine Warnung oder einen schwerwiegenden Fehler handelt. type gibt den Code der Warnmeldung an. Wenn eine textuelle Beschreibung der Warnmeldung verfügbar ist, wird sie in description angegeben.

Hinweis: Dieses Signal hat hauptsächlich informativen Charakter und kann zu Debugging-Zwecken verwendet werden; normalerweise erfordert es keine Aktionen seitens der Anwendung.

Hinweis: Nicht alle Backends unterstützen diese Funktionalität.

Diese Funktion wurde in Qt 6.2 eingeführt.

Siehe auch alertReceived(), QSsl::AlertLevel, und QSsl::AlertType.

void QWebSocketServer::close()

Schließt den Server. Der Server wartet nicht mehr auf eingehende Verbindungen.

[signal] void QWebSocketServer::closed()

Dieses Signal wird ausgegeben, wenn der Server seine Verbindung geschlossen hat.

Siehe auch close().

QWebSocketProtocol::CloseCode QWebSocketServer::error() const

Gibt einen Fehlercode für den zuletzt aufgetretenen Fehler zurück. Ist kein Fehler aufgetreten, wird QWebSocketProtocol::CloseCodeNormal zurückgegeben.

Siehe auch errorString().

QString QWebSocketServer::errorString() const

Gibt eine menschenlesbare Beschreibung des letzten aufgetretenen Fehlers zurück. Ist kein Fehler aufgetreten, wird eine leere Zeichenkette zurückgegeben.

Siehe auch serverError().

void QWebSocketServer::handleConnection(QTcpSocket *socket) const

Erweitert einen tcp socket zu einem Websocket.

Das Objekt QWebSocketServer übernimmt den Besitz des Socket-Objekts und löscht es bei Bedarf.

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

QWebSocketServer gibt dieses Signal aus, wenn eine Zertifikatsüberprüfung error gefunden wurde und wenn eine frühzeitige Fehlerberichterstattung in QSslConfiguration aktiviert wurde.

Diese Funktion wurde in Qt 6.2 eingeführt.

Siehe auch sslErrors() und QSslConfiguration::setHandshakeMustInterruptOnError().

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

Gibt den Handshake-Timeout für neue Verbindungen in Millisekunden zurück.

Der Standardwert ist 10 Sekunden. Wenn ein Peer mehr Zeit benötigt, um den Handshake abzuschließen, wird seine Verbindung geschlossen.

Siehe auch setHandshakeTimeout() und handshakeTimeoutMS().

int QWebSocketServer::handshakeTimeoutMS() const

Gibt den Handshake-Timeout für neue Verbindungen in Millisekunden zurück.

Der Standardwert ist 10 Sekunden. Wenn ein Peer mehr Zeit benötigt, um den Handshake abzuschließen, wird seine Verbindung geschlossen.

Siehe auch setHandshakeTimeout() und handshakeTimeout().

bool QWebSocketServer::hasPendingConnections() const

Gibt true zurück, wenn der Server über ausstehende Verbindungen verfügt; andernfalls wird false zurückgegeben.

Siehe auch nextPendingConnection() und setMaxPendingConnections().

bool QWebSocketServer::isListening() const

Gibt true zurück, wenn der Server gerade auf eingehende Verbindungen wartet; andernfalls wird false zurückgegeben. Wenn das Lauschen fehlschlägt, gibt error() den Grund zurück.

Siehe auch listen() und error().

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

Weist den Server an, auf eingehende Verbindungen an der Adresse address und dem Port port zu warten. Wenn port gleich 0 ist, wird automatisch ein Port gewählt. Wenn address gleich QHostAddress::Any ist, lauscht der Server an allen Netzwerkschnittstellen.

Gibt bei Erfolg true zurück, andernfalls false.

Siehe auch isListening().

int QWebSocketServer::maxPendingConnections() const

Gibt die maximale Anzahl der anstehenden akzeptierten Verbindungen zurück. Der Standardwert ist 30.

Siehe auch setMaxPendingConnections() und hasPendingConnections().

[signal] void QWebSocketServer::newConnection()

Dieses Signal wird jedes Mal ausgesendet, wenn eine neue Verbindung verfügbar ist.

Siehe auch hasPendingConnections() und nextPendingConnection().

[virtual] QWebSocket *QWebSocketServer::nextPendingConnection()

Gibt die nächste anstehende Verbindung als verbundenes QWebSocket Objekt zurück. QWebSocketServer übernimmt nicht das Eigentum an dem zurückgegebenen QWebSocket Objekt. Es obliegt dem Aufrufer, das Objekt explizit zu löschen, wenn es nicht mehr verwendet wird, da sonst ein Speicherleck entsteht. nullptr wird zurückgegeben, wenn diese Funktion aufgerufen wird, wenn es keine anstehenden Verbindungen gibt.

Hinweis: Das zurückgegebene QWebSocket Objekt kann nicht von einem anderen Thread verwendet werden.

Siehe auch hasPendingConnections().

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

Dieses Signal wird ausgesendet, wenn eine neue Verbindung angefordert wird. Der mit diesem Signal verbundene Slot sollte angeben, ob der Ursprung (der durch den origin()-Aufruf ermittelt werden kann) im authenticator -Objekt erlaubt ist (durch Ausgabe von setAllowed()).

Wenn kein Slot mit diesem Signal verbunden ist, werden standardmäßig alle Ursprünge akzeptiert.

Hinweis: Es ist nicht möglich, eine QueuedConnection zur Verbindung mit diesem Signal zu verwenden, da die Verbindung immer erfolgreich ist.

void QWebSocketServer::pauseAccepting()

Unterbricht eingehende neue Verbindungen. In der Warteschlange befindliche Verbindungen bleiben in der Warteschlange.

Siehe auch resumeAccepting().

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

QWebSocketServer kann dieses Signal mehrmals während des SSL-Handshakes aussenden, bevor die Verschlüsselung aufgebaut ist, um anzuzeigen, dass bei der Feststellung der Identität der Gegenstelle ein Fehler aufgetreten ist. Die error ist in der Regel ein Hinweis darauf, dass QWebSocketServer nicht in der Lage ist, die Gegenstelle sicher zu identifizieren.

Dieses Signal gibt Ihnen einen frühen Hinweis darauf, dass etwas nicht in Ordnung ist. Wenn Sie eine Verbindung zu diesem Signal herstellen, können Sie manuell entscheiden, ob Sie die Verbindung innerhalb des angeschlossenen Slots abbauen wollen, bevor der Handshake abgeschlossen ist. Wird nichts unternommen, fährt QWebSocketServer mit der Ausgabe von QWebSocketServer::sslErrors() fort.

Siehe auch sslErrors().

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

QWebSocketServer sendet dieses Signal, wenn er eine PSK-Ciphersuite aushandelt, so dass eine PSK-Authentifizierung erforderlich ist.

Bei der Verwendung von PSK muss der Client dem Server eine gültige Identität und einen gültigen Pre-Shared Key senden, damit der SSL-Handshake fortgesetzt werden kann. Anwendungen können diese Informationen in einem mit diesem Signal verbundenen Slot bereitstellen, indem sie das übergebene authenticator Objekt entsprechend ihren Bedürfnissen ausfüllen.

Hinweis: Das Ignorieren dieses Signals oder die Nichtbereitstellung der erforderlichen Anmeldeinformationen führt zum Scheitern des Handshakes und damit zum Abbruch der Verbindung.

Hinweis: Das Objekt authenticator ist Eigentum des Sockets und darf von der Anwendung nicht gelöscht werden.

Siehe auch QSslPreSharedKeyAuthenticator und QSslSocket::preSharedKeyAuthenticationRequired().

QNetworkProxy QWebSocketServer::proxy() const

Gibt den Netzwerk-Proxy für diesen Server zurück. Standardmäßig wird QNetworkProxy::DefaultProxy verwendet.

Siehe auch setProxy().

void QWebSocketServer::resumeAccepting()

Nimmt wieder neue Verbindungen an.

Siehe auch pauseAccepting().

QWebSocketServer::SslMode QWebSocketServer::secureMode() const

Gibt den sicheren Modus zurück, in dem der Server läuft.

Siehe auch QWebSocketServer() und SslMode.

QHostAddress QWebSocketServer::serverAddress() const

Gibt die Adresse des Servers zurück, wenn der Server auf Verbindungen wartet; andernfalls wird QHostAddress::Null zurückgegeben.

Siehe auch serverPort() und listen().

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

Dieses Signal wird ausgegeben, wenn beim Aufbau einer WebSocket-Verbindung ein Fehler auftritt. Der Parameter closeCode beschreibt den Typ des aufgetretenen Fehlers

Siehe auch errorString().

QString QWebSocketServer::serverName() const

Gibt den Servernamen zurück, der während der http-Handshake-Phase verwendet wird.

Siehe auch setServerName().

quint16 QWebSocketServer::serverPort() const

Gibt den Port des Servers zurück, wenn der Server auf Verbindungen wartet; andernfalls wird 0 zurückgegeben.

Siehe auch serverAddress() und listen().

QUrl QWebSocketServer::serverUrl() const

Gibt eine URL zurück, die Clients verwenden können, um eine Verbindung zu diesem Server herzustellen, wenn der Server auf Verbindungen wartet. Andernfalls wird eine ungültige URL zurückgegeben.

Siehe auch serverPort(), serverAddress(), und listen().

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

Setzt den Handshake-Timeout für neue Verbindungen auf msec Millisekunden.

Standardmäßig ist dieser Wert auf 10 Sekunden eingestellt. Wenn ein Peer mehr Zeit benötigt, um den Handshake abzuschließen, wird seine Verbindung geschlossen. Sie können einen negativen Wert (z. B. -1) übergeben, um den Timeout zu deaktivieren.

Siehe auch handshakeTimeout() und handshakeTimeoutMS().

void QWebSocketServer::setHandshakeTimeout(int msec)

Dies ist eine überladene Funktion.

void QWebSocketServer::setMaxPendingConnections(int numConnections)

Legt die maximale Anzahl der anstehenden akzeptierten Verbindungen auf numConnections fest. WebSocketServer akzeptiert nicht mehr als numConnections eingehende Verbindungen, bevor nextPendingConnection() aufgerufen wird. Standardmäßig liegt die Grenze bei 30 anstehenden Verbindungen.

QWebSocketServer gibt das Signal error() mit dem Code QWebSocketProtocol::CloseCodeAbnormalDisconnection close aus, wenn die maximale Anzahl von Verbindungen erreicht wurde. Der WebSocket-Handshake schlägt fehl und der Socket wird geschlossen.

Siehe auch maxPendingConnections() und hasPendingConnections().

void QWebSocketServer::setProxy(const QNetworkProxy &networkProxy)

Setzt den expliziten Netzwerkproxy für diesen Server auf networkProxy.

Um die Verwendung eines Proxys zu deaktivieren, verwenden Sie den Proxy-Typ QNetworkProxy::NoProxy:

server->setProxy(QNetworkProxy::NoProxy);

Siehe auch proxy().

void QWebSocketServer::setServerName(const QString &serverName)

Setzt den Servernamen, der während der HTTP-Handshake-Phase verwendet wird, auf den angegebenen serverName. serverName kann leer sein; in diesem Fall wird ein leerer Servername an den Client gesendet. Bereits verbundene Clients werden über diese Änderung nicht benachrichtigt, nur neu verbundene Clients sehen diesen neuen Namen.

Siehe auch serverName().

bool QWebSocketServer::setSocketDescriptor(qintptr socketDescriptor)

Legt den Socket-Deskriptor fest, den dieser Server verwenden soll, wenn er auf eingehende Verbindungen zu socketDescriptor wartet.

Gibt true zurück, wenn der Socket erfolgreich gesetzt wurde; andernfalls wird false zurückgegeben. Es wird davon ausgegangen, dass sich der Socket im Lauschzustand befindet.

Siehe auch socketDescriptor() und isListening().

void QWebSocketServer::setSslConfiguration(const QSslConfiguration &sslConfiguration)

Setzt die SSL-Konfiguration für QWebSocketServer auf sslConfiguration. Diese Methode hat keine Wirkung, wenn QWebSocketServer im nicht sicheren Modus (QWebSocketServer::NonSecureMode) läuft.

Siehe auch sslConfiguration() und SslMode.

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

Setzt die Liste der vom Server unterstützten Protokolle auf protocols.

Diese Funktion wurde in Qt 6.4 eingeführt.

Siehe auch supportedSubprotocols().

qintptr QWebSocketServer::socketDescriptor() const

Gibt den nativen Socket-Deskriptor zurück, den der Server verwendet, um auf eingehende Anweisungen zu warten, oder -1, wenn der Server nicht wartet. Wenn der Server QNetworkProxy verwendet, ist der zurückgegebene Deskriptor möglicherweise nicht mit nativen Socket-Funktionen verwendbar.

Siehe auch setSocketDescriptor() und isListening().

QSslConfiguration QWebSocketServer::sslConfiguration() const

Gibt die vom QWebSocketServer verwendete SSL-Konfiguration zurück. Wenn der Server nicht im sicheren Modus läuft (QWebSocketServer::SecureMode), gibt diese Methode QSslConfiguration::defaultConfiguration() zurück.

Siehe auch setSslConfiguration(), SslMode, und QSslConfiguration::defaultConfiguration().

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

QWebSocketServer gibt dieses Signal nach dem SSL-Handshake aus, um anzuzeigen, dass ein oder mehrere Fehler bei der Feststellung der Identität der Gegenstelle aufgetreten sind. Die Fehler sind in der Regel ein Hinweis darauf, dass QWebSocketServer nicht in der Lage ist, die Gegenstelle sicher zu identifizieren. Wenn keine Maßnahmen ergriffen werden, wird die Verbindung nach der Ausgabe dieses Signals abgebrochen.

errors enthält einen oder mehrere Fehler, die QSslSocket daran hindern, die Identität der Gegenstelle zu überprüfen.

Siehe auch peerVerifyError().

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

Gibt die Liste der vom Server unterstützten Protokolle zurück.

Diese Funktion wurde in Qt 6.4 eingeführt.

Siehe auch setSupportedSubprotocols().

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

Gibt eine Liste der WebSocket-Versionen zurück, die dieser Server unterstützt.

© 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.