QTcpServer Class
La classe QTcpServer permet de créer un serveur TCP. En savoir plus...
| En-tête : | #include <QTcpServer> |
| CMake : | find_package(Qt6 REQUIRED COMPONENTS Network) target_link_libraries(mytarget PRIVATE Qt6::Network) |
| qmake : | QT += network |
| Hérite de : | QObject |
| Hérité par : |
- Liste de tous les membres, y compris les membres hérités
- QTcpServer fait partie de l'API de programmation réseau.
Remarque : toutes les fonctions de cette classe sont réentrantes.
Fonctions publiques
| QTcpServer(QObject *parent = nullptr) | |
| virtual | ~QTcpServer() |
| void | close() |
| QString | errorString() const |
| virtual bool | hasPendingConnections() const |
| bool | isListening() const |
| bool | listen(const QHostAddress &address = QHostAddress::Any, quint16 port = 0) |
(since 6.3) int | listenBacklogSize() const |
| int | maxPendingConnections() const |
| virtual QTcpSocket * | nextPendingConnection() |
| void | pauseAccepting() |
| QNetworkProxy | proxy() const |
| void | resumeAccepting() |
| QHostAddress | serverAddress() const |
| QAbstractSocket::SocketError | serverError() const |
| quint16 | serverPort() const |
(since 6.3) void | setListenBacklogSize(int size) |
| void | setMaxPendingConnections(int numConnections) |
| void | setProxy(const QNetworkProxy &networkProxy) |
| bool | setSocketDescriptor(qintptr socketDescriptor) |
| qintptr | socketDescriptor() const |
| bool | waitForNewConnection(int msec = 0, bool *timedOut = nullptr) |
Signaux
| void | acceptError(QAbstractSocket::SocketError socketError) |
| void | newConnection() |
(since 6.4) void | pendingConnectionAvailable() |
Fonctions protégées
| void | addPendingConnection(QTcpSocket *socket) |
| virtual void | incomingConnection(qintptr socketDescriptor) |
Description détaillée
Cette classe permet d'accepter les connexions TCP entrantes. Vous pouvez spécifier le port ou laisser QTcpServer 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. Lorsque la connexion du client a été ajoutée à la file d’attente des connexions en attente à l’aide de la fonction addPendingConnection(), le signal pendingConnectionAvailable() est émis.
Appelez la fonction ` nextPendingConnection()` pour accepter la connexion en attente en tant que ` QTcpSocket` connectée. La fonction renvoie un pointeur vers un objet ` QTcpSocket ` dans ` QAbstractSocket::ConnectedState `, que vous pouvez utiliser pour communiquer avec le client.
En cas d’erreur, la fonction ` serverError()` renvoie le type d’erreur, et vous pouvez appeler ` errorString()` pour obtenir une description lisible par l’utilisateur de ce qui s’est produit.
Lors de l'écoute des connexions, l'adresse et le port sur lesquels le serveur est à l'écoute sont disponibles via les fonctions serverAddress() et serverPort().
L’appel de la fonction close() arrête l’écoute des connexions entrantes par QTcpServer.
Bien que QTcpServer soit principalement conçu pour être utilisé avec une boucle d’événements, il est possible de l’utiliser sans celle-ci. Dans ce cas, vous devez utiliser la fonction ` waitForNewConnection()`, qui reste bloquée jusqu’à ce qu’une connexion soit disponible ou qu’un délai d’expiration soit atteint.
Voir également QTcpSocket, Fortune Server, Threaded Fortune Server et l'exemple Torrent.
Documentation sur les fonctions membres
[explicit] QTcpServer::QTcpServer(QObject *parent = nullptr)
Crée un objet QTcpServer.
parent est transmis au constructeur QObject.
Voir également listen() et setSocketDescriptor().
[virtual noexcept] QTcpServer::~QTcpServer()
Supprime l'objet ` QTcpServer `. Si le serveur est à l'écoute de connexions, la socket est automatiquement fermée.
Tout client de type « QTcpSocket» encore connecté doit soit se déconnecter, soit être rattaché à un autre parent avant que le serveur ne soit supprimé.
Voir aussi close().
[signal] void QTcpServer::acceptError(QAbstractSocket::SocketError socketError)
Ce signal est émis lorsqu'une erreur survient lors de l'acceptation d'une nouvelle connexion. Le paramètre socketError décrit le type d'erreur qui s'est produite.
Voir également pauseAccepting() et resumeAccepting().
[protected] void QTcpServer::addPendingConnection(QTcpSocket *socket)
Cette fonction est appelée par ` QTcpServer::incomingConnection()` pour ajouter l'socket à la liste des connexions entrantes en attente.
Remarque : n’oubliez pas d’appeler ce membre depuis la fonction incomingConnection() réimplémentée si vous ne souhaitez pas perturber le fonctionnement du mécanisme des connexions en attente. Cette fonction émet le signal pendingConnectionAvailable() une fois que le socket a été ajouté.
Voir également incomingConnection() et pendingConnectionAvailable().
void QTcpServer::close()
Ferme le serveur. Le serveur n'écoutera plus les connexions entrantes.
Voir aussi listen().
QString QTcpServer::errorString() const
Renvoie une description lisible par l'utilisateur de la dernière erreur survenue.
Voir également serverError().
[virtual] bool QTcpServer::hasPendingConnections() const
Renvoie « true » si le serveur a une connexion en attente ; sinon, renvoie « false ».
Voir également nextPendingConnection() et setMaxPendingConnections().
[virtual protected] void QTcpServer::incomingConnection(qintptr socketDescriptor)
Cette fonction virtuelle est appelée par ` QTcpServer ` lorsqu'une nouvelle connexion est disponible. L'argument ` socketDescriptor ` correspond au descripteur de socket natif de la connexion acceptée.
L'implémentation de base crée un ` QTcpSocket`, définit le descripteur de socket, puis stocke ` QTcpSocket ` dans une liste interne de connexions en attente. Enfin, ` newConnection()` est émis.
Réimplémentez cette fonction pour modifier le comportement du serveur lorsqu’une connexion est disponible.
Si ce serveur utilise ` QNetworkProxy `, l’ socketDescriptor peut ne pas être utilisable avec les fonctions de socket natives et ne doit être utilisée qu’avec ` QTcpSocket::setSocketDescriptor()`.
Remarque : si un autre socket est créé lors de la réimplémentation de cette méthode, il doit être ajouté au mécanisme de connexions en attente en appelant ` addPendingConnection()`.
Remarque : si vous souhaitez traiter une connexion entrante en tant que nouvel objet ` QTcpSocket ` dans un autre thread, vous devez transmettre ` socketDescriptor ` à cet autre thread, y créer l’objet ` QTcpSocket ` et utiliser sa méthode ` setSocketDescriptor()`.
Voir également newConnection(), nextPendingConnection() et addPendingConnection().
bool QTcpServer::isListening() const
Renvoie « true » si le serveur est actuellement à l'écoute des connexions entrantes ; sinon, renvoie « false ».
Voir aussi listen().
bool QTcpServer::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 égal à 0, un port est choisi automatiquement. Si address est égal à QHostAddress::Any, le serveur écoutera sur toutes les interfaces réseau.
Renvoie true en cas de réussite ; sinon, renvoie false.
Voir également isListening().
[since 6.3] int QTcpServer::listenBacklogSize() const
Renvoie la taille de la file d'attente des connexions en attente d'acceptation.
Cette fonction a été introduite dans Qt 6.3.
Voir également ` setListenBacklogSize()`.
int QTcpServer::maxPendingConnections() const
Renvoie le nombre maximal de connexions acceptées en attente. La valeur par défaut est 30.
Voir également setMaxPendingConnections() et hasPendingConnections().
[signal] void QTcpServer::newConnection()
Ce signal est émis chaque fois qu'une nouvelle connexion est disponible, qu'elle ait été ajoutée ou non à la file d'attente des connexions en attente.
Voir également hasPendingConnections() et nextPendingConnection().
[virtual] QTcpSocket *QTcpServer::nextPendingConnection()
Renvoie la prochaine connexion en attente sous la forme d'un objet ` QTcpSocket ` connecté.
Le socket est créé en tant qu'enfant du serveur, ce qui signifie qu'il est automatiquement supprimé lorsque l'objet ` QTcpServer ` est détruit. Il est toutefois recommandé de supprimer explicitement l'objet lorsque vous n'en avez plus besoin, afin d'éviter tout gaspillage de mémoire.
nullptr est renvoyé si cette fonction est appelée alors qu’il n’y a aucune connexion en attente.
Remarque : l’objet ` QTcpSocket ` renvoyé ne peut pas être utilisé depuis un autre thread. Si vous souhaitez utiliser une connexion entrante depuis un autre thread, vous devez redéfinir la fonction ` incomingConnection()`.
Voir également hasPendingConnections().
void QTcpServer::pauseAccepting()
Suspend l'acceptation de nouvelles connexions. Les connexions en attente resteront dans la file d'attente.
Voir aussi resumeAccepting().
[private signal, since 6.4] void QTcpServer::pendingConnectionAvailable()
Ce signal est émis chaque fois qu'une nouvelle connexion est ajoutée à la file d'attente des connexions en attente.
Remarque : il s'agit d'un signal privé. Il peut être utilisé dans les connexions de signaux, mais ne peut pas être émis par l'utilisateur.
Cette fonction a été introduite dans Qt 6.4.
Voir également hasPendingConnections() et nextPendingConnection().
QNetworkProxy QTcpServer::proxy() const
Renvoie le proxy réseau associé à cette socket. Par défaut, c'est QNetworkProxy::DefaultProxy qui est utilisé.
Voir également setProxy() et QNetworkProxy.
void QTcpServer::resumeAccepting()
Reprend l'acceptation de nouvelles connexions.
Voir aussi pauseAccepting().
QHostAddress QTcpServer::serverAddress() const
Renvoie l'adresse du serveur si celui-ci est à l'écoute ; sinon, renvoie QHostAddress::Null.
Voir également serverPort() et listen().
QAbstractSocket::SocketError QTcpServer::serverError() const
Renvoie le code d'erreur correspondant à la dernière erreur survenue.
Voir également errorString().
quint16 QTcpServer::serverPort() const
Renvoie le port du serveur si celui-ci est à l'écoute ; sinon, renvoie 0.
Voir également serverAddress() et listen().
[since 6.3] void QTcpServer::setListenBacklogSize(int size)
Définit la taille de la file d'attente des connexions en attente d'acceptation à l'adresse size. Le système d'exploitation peut réduire ou ignorer cette valeur. Par défaut, la taille de la file d'attente est de 50.
Remarque : cette propriété doit être définie avant d’appeler la fonction ` listen()`.
Cette fonction a été introduite dans Qt 6.3.
Voir également ` listenBacklogSize()`.
void QTcpServer::setMaxPendingConnections(int numConnections)
Définit le nombre maximal de connexions acceptées en attente sur numConnections. QTcpServer n'acceptera pas plus de numConnections connexions entrantes avant l'appel de nextPendingConnection(). Par défaut, la limite est de 30 connexions en attente.
Les clients peuvent toujours se connecter même après que le serveur a atteint son nombre maximal de connexions en attente (c'est-à-dire qu’ QTcpSocket peut toujours émettre le signal connected()). QTcpServer cessera d’accepter les nouvelles connexions, mais le système d’exploitation peut tout de même les conserver dans la file d’attente.
Voir également maxPendingConnections() et hasPendingConnections().
void QTcpServer::setProxy(const QNetworkProxy &networkProxy)
Définit le proxy réseau explicite de ce socket sur networkProxy.
Pour désactiver l'utilisation d'un proxy pour ce socket, utilisez le type de proxy QNetworkProxy::NoProxy:
server->setProxy(QNetworkProxy::NoProxy);Voir également proxy() et QNetworkProxy.
bool QTcpServer::setSocketDescriptor(qintptr socketDescriptor)
Définit le descripteur de socket que ce serveur doit utiliser pour écouter les connexions entrantes vers socketDescriptor. Renvoie « true » si la configuration de la socket a réussi ; sinon, renvoie « false ».
On suppose que le socket est en état d’écoute.
Voir également socketDescriptor() et isListening().
qintptr QTcpServer::socketDescriptor() const
Renvoie le descripteur de socket natif utilisé par le serveur pour écouter les instructions entrantes, ou -1 si le serveur n'est pas en mode d'écoute.
Si le serveur utilise QNetworkProxy, le descripteur renvoyé peut ne pas être utilisable avec les fonctions de socket natives.
Voir également setSocketDescriptor() et isListening().
bool QTcpServer::waitForNewConnection(int msec = 0, bool *timedOut = nullptr)
Attend au maximum msec millisecondes ou jusqu’à ce qu’une connexion entrante soit disponible. Renvoie true si une connexion est disponible ; sinon, renvoie false. Si l’opération a dépassé le délai d’attente et que timedOut n’est pas nullptr, *timedOut sera défini sur true.
Il s’agit d’un appel de fonction bloquant. Son utilisation est déconseillée dans une application GUI monothread, car l’application entière cessera de répondre jusqu’à ce que la fonction renvoie une valeur. waitForNewConnection() est particulièrement utile lorsqu’aucune boucle d’événements n’est disponible.
L’alternative non bloquante consiste à s’abonner au signal ` newConnection()`.
Si msec est égal à -1, cette fonction n’aura pas de délai d’expiration.
Voir également hasPendingConnections() et nextPendingConnection().
© 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.