Sur cette page

QWebSocketServer Class

Implémente un serveur basé sur WebSocket. Plus d'informations...

En-tête : #include <QWebSocketServer>
CMake : find_package(Qt6 REQUIRED COMPONENTS WebSockets)
target_link_libraries(mytarget PRIVATE Qt6::WebSockets)
qmake : QT += websockets
Héritages : QObject

Types publics

enum SslMode { SecureMode, NonSecureMode }

Fonctions publiques

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

Signaux

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)
(since 6.11) void sslErrorsOccurred(QSslSocket *socket, const QList<QSslError> &errors)

Description détaillée

Il est modelé sur QTcpServer, et se comporte de la même manière. Ainsi, si vous savez comment utiliser QTcpServer, vous savez comment utiliser QWebSocketServer. Cette classe permet d'accepter les connexions WebSocket entrantes. Vous pouvez spécifier le port ou demander à QWebSocketServer d'en choisir un automatiquement. Vous pouvez écouter sur une adresse spécifique ou sur toutes les adresses de la machine. Appelez listen() pour que le serveur écoute les connexions entrantes.

Le signal newConnection() est alors émis chaque fois qu'un client se connecte au serveur. Appelez nextPendingConnection() pour accepter la connexion en attente en tant que QWebSocket connecté. La fonction renvoie un pointeur vers un QWebSocket dans QAbstractSocket::ConnectedState que vous pouvez utiliser pour communiquer avec le client.

En cas d'erreur, serverError() renvoie le type d'erreur et errorString() peut être appelé pour obtenir une description lisible par l'homme de ce qui s'est passé.

Lors de l'écoute de connexions, l'adresse et le port sur lesquels le serveur écoute sont disponibles sous serverAddress() et serverPort().

En appelant close(), QWebSocketServer arrête d'écouter les connexions entrantes.

QWebSocketServer ne prend actuellement pas en charge les extensions WebSocket.

Note : Lorsque vous travaillez avec des certificats auto-signés, le bogue 594502 de Firefox empêche Firefox de se connecter à un serveur WebSocket sécurisé. Pour contourner ce problème, naviguez d'abord vers le serveur WebSocket sécurisé en utilisant HTTPS. FireFox indiquera que le certificat n'est pas valide. À partir de là, le certificat peut être ajouté aux exceptions. Ensuite, la connexion WebSocket sécurisée devrait fonctionner.

QWebSocketServer ne prend en charge que la version 13 du protocole WebSocket, tel qu'il est décrit dans la RFC 6455.

Le délai d'attente pour l'établissement de la connexion est de 10 secondes par défaut afin d'éviter les dénis de service. Ce délai peut être personnalisé à l'aide de setHandshakeTimeout().

Voir également l'exemple de serveur WebSocket et QWebSocket.

Documentation sur les types de membres

enum QWebSocketServer::SslMode

Indique si le serveur fonctionne sur wss (SecureMode) ou ws (NonSecureMode)

ConstanteValeurDescription
QWebSocketServer::SecureMode0Le serveur fonctionne en mode sécurisé (sur wss)
QWebSocketServer::NonSecureMode1Le serveur fonctionne en mode non sécurisé (sur ws)

Documentation des fonctions membres

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

Construit un nouveau QWebSocketServer avec l'adresse serverName. L'adresse serverName sera utilisée dans la phase d'échange HTTP pour identifier le serveur. Il peut être vide, auquel cas aucun nom de serveur ne sera envoyé au client. Le paramètre secureMode indique si le serveur fonctionne sur wss (SecureMode) ou sur ws (NonSecureMode).

parent est transmis au constructeur de QObject.

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

Détruit l'objet QWebSocketServer. Si le serveur est à l'écoute de connexions, la socket est automatiquement fermée. Tous les clients QWebSocketqui sont encore en attente sont fermés et supprimés.

Voir aussi close().

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

Ce signal est émis lorsque l'acceptation d'une nouvelle connexion entraîne une erreur. Le paramètre socketError décrit le type d'erreur qui s'est produite.

Voir aussi pauseAccepting() et resumeAccepting().

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

QWebSocketServer émet ce signal si un message d'alerte a été reçu d'un homologue. level indique si l'alerte était fatale ou s'il s'agissait d'un avertissement. type est le code expliquant pourquoi l'alerte a été envoyée. Lorsqu'une description textuelle du message d'alerte est disponible, elle est fournie dans description.

Remarque : le signal est principalement utilisé à des fins d'information et de débogage et ne nécessite aucune manipulation dans l'application. Si l'alerte est fatale, le backend sous-jacent la traitera et fermera la connexion.

Remarque : tous les backends ne prennent pas en charge cette fonctionnalité.

Cette fonction a été introduite dans Qt 6.2.

Voir aussi alertSent(), QSsl::AlertLevel, et QSsl::AlertType.

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

QWebSocketServer émet ce signal si un message d'alerte a été envoyé à un homologue. level indique s'il s'agit d'un avertissement ou d'une erreur fatale. type donne le code du message d'alerte. Lorsqu'une description textuelle du message d'alerte est disponible, elle est fournie dans description.

Remarque : ce signal est essentiellement informatif et peut être utilisé à des fins de débogage ; normalement, il n'exige aucune action de la part de l'application.

Note : Tous les backends ne supportent pas cette fonctionnalité.

Cette fonction a été introduite dans Qt 6.2.

Voir aussi alertReceived(), QSsl::AlertLevel, et QSsl::AlertType.

void QWebSocketServer::close()

Ferme le serveur. Le serveur n'écoutera plus les connexions entrantes.

[signal] void QWebSocketServer::closed()

Ce signal est émis lorsque le serveur a fermé sa connexion.

Voir aussi close().

QWebSocketProtocol::CloseCode QWebSocketServer::error() const

Renvoie un code d'erreur pour la dernière erreur survenue. Si aucune erreur ne s'est produite, QWebSocketProtocol::CloseCodeNormal est renvoyé.

Voir aussi errorString().

QString QWebSocketServer::errorString() const

Renvoie une description lisible par l'homme de la dernière erreur survenue. Si aucune erreur ne s'est produite, une chaîne vide est renvoyée.

Voir aussi serverError().

void QWebSocketServer::handleConnection(QTcpSocket *socket) const

Transforme un objet tcp socket en objet websocket.

L'objet QWebSocketServer devient propriétaire de l'objet socket et le supprime le cas échéant.

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

QWebSocketServer émet ce signal si une vérification de certificat error a été trouvée et si un rapport d'erreur précoce a été activé dans QSslConfiguration.

Cette fonction a été introduite dans Qt 6.2.

Voir aussi sslErrors() et QSslConfiguration::setHandshakeMustInterruptOnError().

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

Renvoie le délai d'attente pour les nouvelles connexions en millisecondes.

La valeur par défaut est de 10 secondes. Si un pair prend plus de temps pour terminer la poignée de main, sa connexion est fermée.

Voir aussi setHandshakeTimeout() et handshakeTimeoutMS().

int QWebSocketServer::handshakeTimeoutMS() const

Renvoie le délai d'attente pour les nouvelles connexions en millisecondes.

La valeur par défaut est de 10 secondes. Si un pair prend plus de temps pour terminer la poignée de main, sa connexion est fermée.

Voir aussi setHandshakeTimeout() et handshakeTimeout().

bool QWebSocketServer::hasPendingConnections() const

Retourne true si le serveur a des connexions en attente, sinon retourne false.

Voir aussi nextPendingConnection() et setMaxPendingConnections().

bool QWebSocketServer::isListening() const

Retourne vrai si le serveur est en train d'écouter les connexions entrantes, sinon retourne faux. Si l'écoute échoue, error() renvoie la raison.

Voir aussi listen() et error().

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

Indique au serveur d'écouter les connexions entrantes sur l'adresse address et le port port. Si port est 0, un port est choisi automatiquement. Si address est QHostAddress::Any, le serveur écoutera sur toutes les interfaces réseau.

Retourne true en cas de succès, sinon retourne false.

Voir aussi isListening().

int QWebSocketServer::maxPendingConnections() const

Renvoie le nombre maximum de connexions acceptées en attente. La valeur par défaut est 30.

Voir aussi setMaxPendingConnections() et hasPendingConnections().

[signal] void QWebSocketServer::newConnection()

Ce signal est émis chaque fois qu'une nouvelle connexion est disponible.

Voir aussi hasPendingConnections() et nextPendingConnection().

[virtual] QWebSocket *QWebSocketServer::nextPendingConnection()

Renvoie la prochaine connexion en attente sous la forme d'un objet QWebSocket connecté. QWebSocketServer n'est pas propriétaire de l'objet QWebSocket renvoyé. Il appartient à l'appelant de supprimer explicitement l'objet lorsqu'il n'est plus utilisé, sinon une fuite de mémoire se produira. nullptr est renvoyé si cette fonction est appelée alors qu'il n'y a pas de connexions en attente.

Remarque : l'objet QWebSocket renvoyé ne peut pas être utilisé par un autre thread.

Voir aussi hasPendingConnections().

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

Ce signal est émis lorsqu'une nouvelle connexion est demandée. Le slot connecté à ce signal doit indiquer si l'origine (qui peut être déterminée par l'appel à origin()) est autorisée dans l'objet authenticator (en lançant setAllowed()).

Si aucun slot n'est connecté à ce signal, toutes les origines seront acceptées par défaut.

Remarque : il n'est pas possible d'utiliser une QueuedConnection pour se connecter à ce signal, car la connexion aboutira toujours.

void QWebSocketServer::pauseAccepting()

Interrompt les nouvelles connexions entrantes. Les connexions en attente restent dans la file d'attente.

Voir aussi resumeAccepting().

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

QWebSocketServer peut émettre ce signal plusieurs fois au cours de la poignée de main SSL, avant que le cryptage n'ait été établi, pour indiquer qu'une erreur s'est produite lors de l'établissement de l'identité de l'homologue. Le signal error indique généralement que QWebSocketServer n'est pas en mesure d'identifier l'homologue de manière sécurisée.

Ce signal vous permet de savoir rapidement si quelque chose ne va pas. En vous connectant à ce signal, vous pouvez choisir manuellement de couper la connexion à partir de l'emplacement connecté avant que la poignée de main ne soit terminée. Si aucune action n'est entreprise, QWebSocketServer émettra QWebSocketServer::sslErrors().

Voir également sslErrors().

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

QWebSocketServer émet ce signal lorsqu'il négocie une suite de chiffrement PSK, et une authentification PSK est donc nécessaire.

Lors de l'utilisation de la PSK, le client doit envoyer au serveur une identité valide et une clé prépartagée valide, afin que la poignée de main SSL puisse se poursuivre. Les applications peuvent fournir ces informations dans un slot connecté à ce signal, en remplissant l'objet authenticator en fonction de leurs besoins.

Remarque : le fait d'ignorer ce signal ou de ne pas fournir les informations d'identification requises entraîne l'échec de la poignée de main et, par conséquent, l'interruption de la connexion.

Remarque : l'objet authenticator appartient à la socket et ne doit pas être supprimé par l'application.

Voir aussi QSslPreSharedKeyAuthenticator et QSslSocket::preSharedKeyAuthenticationRequired().

QNetworkProxy QWebSocketServer::proxy() const

Renvoie le proxy réseau pour ce serveur. Par défaut, QNetworkProxy::DefaultProxy est utilisé.

Voir aussi setProxy().

void QWebSocketServer::resumeAccepting()

Reprend l'acceptation de nouvelles connexions.

Voir aussi pauseAccepting().

QWebSocketServer::SslMode QWebSocketServer::secureMode() const

Renvoie le mode sécurisé dans lequel le serveur fonctionne.

Voir aussi QWebSocketServer() et SslMode.

QHostAddress QWebSocketServer::serverAddress() const

Renvoie l'adresse du serveur si celui-ci est à l'écoute des connexions ; sinon, il renvoie QHostAddress::Null.

Voir aussi serverPort() et listen().

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

Ce signal est émis lorsqu'une erreur se produit lors de l'établissement d'une connexion WebSocket. Le paramètre closeCode décrit le type d'erreur qui s'est produite

Voir aussi errorString().

QString QWebSocketServer::serverName() const

Renvoie le nom du serveur utilisé lors de la phase d'échange http.

Voir aussi setServerName().

quint16 QWebSocketServer::serverPort() const

Renvoie le port du serveur si celui-ci est à l'écoute des connexions ; sinon, renvoie 0.

Voir aussi serverAddress() et listen().

QUrl QWebSocketServer::serverUrl() const

Renvoie une URL que les clients peuvent utiliser pour se connecter à ce serveur si celui-ci est à l'écoute des connexions. Dans le cas contraire, une URL invalide est renvoyée.

Voir aussi serverPort(), serverAddress() et listen().

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

Fixe le délai d'attente pour les nouvelles connexions à msec millisecondes.

Par défaut, ce délai est fixé à 10 secondes. Si un pair prend plus de temps pour terminer la poignée de main, sa connexion est fermée. Vous pouvez passer une valeur négative (par exemple -1) pour désactiver le délai d'attente.

Voir aussi handshakeTimeout() et handshakeTimeoutMS().

void QWebSocketServer::setHandshakeTimeout(int msec)

Il s'agit d'une fonction surchargée.

void QWebSocketServer::setMaxPendingConnections(int numConnections)

Fixe le nombre maximal de connexions acceptées en attente à numConnections. WebSocketServer n'acceptera pas plus de numConnections connexions entrantes avant que nextPendingConnection() ne soit appelé. Par défaut, la limite est de 30 connexions en attente.

QWebSocketServer émettra le signal error() avec le code de fermeture QWebSocketProtocol::CloseCodeAbnormalDisconnection lorsque le nombre maximum de connexions aura été atteint. La poignée de main WebSocket échoue et la socket est fermée.

Voir aussi maxPendingConnections() et hasPendingConnections().

void QWebSocketServer::setProxy(const QNetworkProxy &networkProxy)

Définit le proxy réseau explicite pour ce serveur à networkProxy.

Pour désactiver l'utilisation d'un proxy, utilisez le type de proxy QNetworkProxy::NoProxy:

server->setProxy(QNetworkProxy::NoProxy);

Voir aussi proxy().

void QWebSocketServer::setServerName(const QString &serverName)

Définit le nom du serveur qui sera utilisé lors de la phase d'échange HTTP à l'adresse serverName. L'adresse serverName peut être vide, auquel cas un nom de serveur vide sera envoyé au client. Les clients déjà connectés ne seront pas informés de ce changement, seuls les clients nouvellement connectés verront ce nouveau nom.

Voir aussi serverName().

bool QWebSocketServer::setSocketDescriptor(qintptr socketDescriptor)

Définit le descripteur de socket que ce serveur doit utiliser lorsqu'il écoute les connexions entrantes sur socketDescriptor.

Retourne true si la socket est définie avec succès, sinon retourne false. La socket est supposée être en état d'écoute.

Voir aussi socketDescriptor() et isListening().

void QWebSocketServer::setSslConfiguration(const QSslConfiguration &sslConfiguration)

Définit la configuration SSL pour QWebSocketServer à sslConfiguration. Cette méthode n'a aucun effet si QWebSocketServer fonctionne en mode non sécurisé (QWebSocketServer::NonSecureMode).

Voir aussi sslConfiguration() et SslMode.

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

Définit la liste des protocoles pris en charge par le serveur à protocols.

Cette fonction a été introduite dans Qt 6.4.

Voir aussi supportedSubprotocols().

qintptr QWebSocketServer::socketDescriptor() const

Renvoie le descripteur de socket natif que le serveur utilise pour écouter les instructions entrantes, ou -1 si le serveur n'écoute pas. Si le serveur utilise QNetworkProxy, le descripteur retourné peut ne pas être utilisable avec les fonctions de socket natives.

Voir aussi setSocketDescriptor() et isListening().

QSslConfiguration QWebSocketServer::sslConfiguration() const

Renvoie la configuration SSL utilisée par le serveur QWebSocketServer. Si le serveur ne fonctionne pas en mode sécurisé (QWebSocketServer::SecureMode), cette méthode renvoie QSslConfiguration::defaultConfiguration().

Voir aussi setSslConfiguration(), SslMode, et QSslConfiguration::defaultConfiguration().

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

QWebSocketServer émet ce signal après la poignée de main SSL pour indiquer qu'une ou plusieurs erreurs se sont produites lors de l'établissement de l'identité de l'homologue.

Ces erreurs indiquent généralement que QWebSocketServer n'est pas en mesure d'identifier l'homologue de manière sécurisée. Si aucune mesure n'est prise, la connexion sera interrompue après l'émission de ce signal.

errors contient une ou plusieurs erreurs qui empêchent QSslSocket de vérifier l'identité de l'homologue.

Voir également peerVerifyError() et sslErrorsOccurred().

[signal, since 6.11] void QWebSocketServer::sslErrorsOccurred(QSslSocket *socket, const QList<QSslError> &errors)

QWebSocketServer émet ce signal après la poignée de main SSL pour indiquer qu'une ou plusieurs erreurs se sont produites lors de l'établissement de l'identité de l'homologue.

Ces erreurs indiquent généralement que socket n'est pas en mesure d'identifier l'homologue de manière sécurisée. Si aucune mesure n'est prise, la connexion sera interrompue après l'émission de ce signal.

errors contient une ou plusieurs erreurs qui empêchent QSslSocket de vérifier l'identité de l'homologue.

Si vous voulez continuer à vous connecter malgré les erreurs qui se sont produites, vous devez appeler QSslSocket::ignoreSslErrors() à partir d'un slot connecté à ce signal. Si vous devez accéder à la liste des erreurs ultérieurement, vous pouvez appeler QSslSocket::sslHandshakeErrors().

Remarque : vous ne pouvez pas utiliser Qt::QueuedConnection lorsque vous vous connectez à ce signal, sinon l'appel à QSslSocket::ignoreSslErrors() n'aura aucun effet.

Cette fonction a été introduite dans Qt 6.11.

Voir aussi peerVerifyError() et sslErrors().

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

Renvoie la liste des protocoles pris en charge par le serveur.

Cette fonction a été introduite dans Qt 6.4.

Voir aussi setSupportedSubprotocols().

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

Renvoie une liste des versions de WebSocket prises en charge par ce serveur.

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