Sur cette page

QAbstractSocket Class

La classe `QAbstractSocket` fournit les fonctionnalités de base communes à tous les types de sockets. En savoir plus...

En-tête : #include <QAbstractSocket>
CMake : find_package(Qt6 REQUIRED COMPONENTS Network)
target_link_libraries(mytarget PRIVATE Qt6::Network)
qmake : QT += network
Hérite de : QIODevice
Hérité par :

QTcpSocket et QUdpSocket

Remarque : toutes les fonctions de cette classe sont réentrantes.

Types publics

enum BindFlag { ShareAddress, DontShareAddress, ReuseAddressHint, DefaultForPlatform }
flags BindMode
enum NetworkLayerProtocol { IPv4Protocol, IPv6Protocol, AnyIPProtocol, UnknownNetworkLayerProtocol }
enum PauseMode { PauseNever, PauseOnSslErrors }
flags PauseModes
enum SocketError { ConnectionRefusedError, RemoteHostClosedError, HostNotFoundError, SocketAccessError, SocketResourceError, …, UnknownSocketError }
enum SocketOption { LowDelayOption, KeepAliveOption, MulticastTtlOption, MulticastLoopbackOption, TypeOfServiceOption, …, KeepAliveCountOption }
enum SocketState { UnconnectedState, HostLookupState, ConnectingState, ConnectedState, BoundState, …, ListeningState }
enum SocketType { TcpSocket, UdpSocket, SctpSocket, UnknownSocketType }

Fonctions publiques

QAbstractSocket(QAbstractSocket::SocketType socketType, QObject *parent)
virtual ~QAbstractSocket()
void abort()
virtual bool bind(const QHostAddress &address, quint16 port = 0, QAbstractSocket::BindMode mode = DefaultForPlatform)
bool bind(quint16 port = 0, QAbstractSocket::BindMode mode = DefaultForPlatform)
(since 6.2) bool bind(QHostAddress::SpecialAddress addr, quint16 port = 0, QAbstractSocket::BindMode mode = DefaultForPlatform)
virtual void connectToHost(const QString &hostName, quint16 port, QIODeviceBase::OpenMode openMode = ReadWrite, QAbstractSocket::NetworkLayerProtocol protocol = AnyIPProtocol)
void connectToHost(const QHostAddress &address, quint16 port, QIODeviceBase::OpenMode openMode = ReadWrite)
virtual void disconnectFromHost()
QAbstractSocket::SocketError error() const
bool flush()
bool isValid() const
QHostAddress localAddress() const
quint16 localPort() const
QAbstractSocket::PauseModes pauseMode() const
QHostAddress peerAddress() const
QString peerName() const
quint16 peerPort() const
QString protocolTag() const
QNetworkProxy proxy() const
qint64 readBufferSize() const
virtual void resume()
void setPauseMode(QAbstractSocket::PauseModes pauseMode)
void setProtocolTag(const QString &tag)
void setProxy(const QNetworkProxy &networkProxy)
virtual void setReadBufferSize(qint64 size)
virtual bool setSocketDescriptor(qintptr socketDescriptor, QAbstractSocket::SocketState socketState = ConnectedState, QIODeviceBase::OpenMode openMode = ReadWrite)
virtual void setSocketOption(QAbstractSocket::SocketOption option, const QVariant &value)
virtual qintptr socketDescriptor() const
virtual QVariant socketOption(QAbstractSocket::SocketOption option)
QAbstractSocket::SocketType socketType() const
QAbstractSocket::SocketState state() const
virtual bool waitForConnected(int msecs = 30000)
virtual bool waitForDisconnected(int msecs = 30000)

Fonctions publiques réimplémentées

virtual qint64 bytesAvailable() const override
virtual qint64 bytesToWrite() const override
virtual void close() override
virtual bool isSequential() const override
virtual bool waitForBytesWritten(int msecs = 30000) override
virtual bool waitForReadyRead(int msecs = 30000) override

Signaux

void connected()
void disconnected()
void errorOccurred(QAbstractSocket::SocketError socketError)
void hostFound()
void proxyAuthenticationRequired(const QNetworkProxy &proxy, QAuthenticator *authenticator)
void stateChanged(QAbstractSocket::SocketState socketState)

Fonctions protégées

void setLocalAddress(const QHostAddress &address)
void setLocalPort(quint16 port)
void setPeerAddress(const QHostAddress &address)
void setPeerName(const QString &name)
void setPeerPort(quint16 port)
void setSocketError(QAbstractSocket::SocketError socketError)
void setSocketState(QAbstractSocket::SocketState state)

Fonctions protégées réimplémentées

virtual qint64 readData(char *data, qint64 maxSize) override
virtual qint64 readLineData(char *data, qint64 maxlen) override
virtual qint64 skipData(qint64 maxSize) override
virtual qint64 writeData(const char *data, qint64 size) override

Description détaillée

QAbstractSocket est la classe de base de QTcpSocket et QUdpSocket et contient toutes les fonctionnalités communes à ces deux classes. Si vous avez besoin d'un socket, deux options s'offrent à vous :

TCP (Transmission Control Protocol) est un protocole de transport fiable, orienté flux et orienté connexion. UDP (User Datagram Protocol) est un protocole non fiable, orienté datagrammes et sans connexion. En pratique, cela signifie que TCP est mieux adapté à la transmission continue de données, tandis que le protocole UDP, plus léger, peut être utilisé lorsque la fiabilité n’est pas un critère essentiel.

L’API de `QAbstractSocket` harmonise la plupart des différences entre les deux protocoles. Par exemple, bien que le protocole UDP soit sans connexion, la fonction ` connectToHost()` établit une connexion virtuelle pour les sockets UDP, ce qui vous permet d’utiliser `QAbstractSocket` à peu près de la même manière, quel que soit le protocole sous-jacent. En interne, `QAbstractSocket` mémorise l’adresse et le port passés à la fonction ` connectToHost()`, et des fonctions telles que ` read()` et ` write()` utilisent ces valeurs.

À tout moment, QAbstractSocket possède un état (renvoyé par state()). L’état initial est UnconnectedState. Après l’appel de connectToHost(), la socket passe d’abord à l’état HostLookupState. Si l’hôte est trouvé, QAbstractSocket passe à l’état ConnectingState et émet le signal hostFound(). Une fois la connexion établie, il passe à l’état « ConnectedState » et émet le signal « connected() ». Si une erreur survient à n’importe quelle étape, le signal « errorOccurred() » est émis. Chaque fois que l’état change, le signal « stateChanged() » est émis. Pour plus de commodité, la méthode « isValid() » renvoie « true » si le socket est prêt pour la lecture et l’écriture, mais notez que l’état du socket doit être « ConnectedState » avant que la lecture et l’écriture puissent avoir lieu.

Lisez ou écrivez des données en appelant read() ou write(), ou utilisez les fonctions de commodité readLine() et readAll(). QAbstractSocket hérite également des méthodes getChar(), putChar() et ungetChar() de QIODevice, qui opèrent sur des octets individuels. Le signal bytesWritten() est émis lorsque des données ont été écrites sur la socket. Notez que Qt ne limite pas la taille du tampon d'écriture. Vous pouvez surveiller sa taille en écoutant ce signal.

Le signal « readyRead() » est émis chaque fois qu’un nouveau bloc de données est arrivé. La fonction « bytesAvailable() » renvoie alors le nombre d’octets disponibles pour la lecture. En général, vous connecterez le signal « readyRead() » à un slot et y lirez toutes les données disponibles. Si vous ne lisez pas toutes les données en une seule fois, les données restantes resteront disponibles ultérieurement, et toute nouvelle donnée entrante sera ajoutée au tampon de lecture interne de QAbstractSocket. Pour limiter la taille du tampon de lecture, appelez la fonction setReadBufferSize().

Pour fermer la socket, appelez disconnectFromHost(). QAbstractSocket entre alors dans l’état « QAbstractSocket::ClosingState ». Une fois que toutes les données en attente ont été écrites sur la socket, QAbstractSocket ferme effectivement la socket, entre dans l’état « QAbstractSocket::UnconnectedState » et émet disconnected(). Si vous souhaitez interrompre immédiatement une connexion, en ignorant toutes les données en attente, appelez plutôt la fonction abort(). Si l’hôte distant ferme la connexion, QAbstractSocket émettra le signal errorOccurred(QAbstractSocket::RemoteHostClosedError), pendant lequel l’état du socket restera ConnectedState, puis le signal disconnected() sera émis.

Le port et l’adresse du pair connecté sont récupérés en appelant peerPort() et peerAddress(). peerName() renvoie le nom d’hôte du pair, tel qu’il a été passé à connectToHost(). localPort() et localAddress() renvoient respectivement le port et l’adresse de la socket locale.

QAbstractSocket fournit un ensemble de fonctions qui suspendent le thread appelant jusqu’à ce que certains signaux soient émis. Ces fonctions peuvent être utilisées pour implémenter des sockets bloquantes :

  • waitForConnected() bloque jusqu’à ce qu’une connexion soit établie.
  • waitForReadyRead() bloque jusqu’à ce que de nouvelles données soient disponibles pour la lecture.
  • waitForBytesWritten() bloque jusqu’à ce qu’un paquet de données ait été écrit sur le socket.
  • waitForDisconnected() bloque jusqu'à ce que la connexion soit fermée.

Voici un exemple :

    int numRead = 0, numReadTotal = 0;
    char buffer[50];

    forever {
        numRead  = socket.read(buffer, 50);

        // do whatever with array

        numReadTotal += numRead;
        if (numRead == 0 && !socket.waitForReadyRead())
            break;
    }

Si waitForReadyRead() renvoie false, cela signifie que la connexion a été fermée ou qu’une erreur s’est produite.

La programmation avec un socket bloquant est radicalement différente de celle avec un socket non bloquant. Un socket bloquant ne nécessite pas de boucle d’événements et conduit généralement à un code plus simple. Cependant, dans une application avec interface graphique, les sockets bloquants ne doivent être utilisés que dans des threads non liés à l’interface graphique, afin d’éviter le gel de celle-ci. Consultez les exemples `fortuneclient ` et `blockingfortuneclient ` pour avoir un aperçu des deux approches.

Remarque : nous déconseillons l'utilisation des fonctions bloquantes en association avec des signaux. Il convient d'utiliser l'une ou l'autre de ces deux possibilités.

QAbstractSocket peut être utilisé avec les opérateurs de flux d’ QTextStream et d’ QDataStream(opérateur <<() et opérateur >>()). Il y a toutefois un point à prendre en compte : vous devez vous assurer qu’il y a suffisamment de données disponibles avant de tenter de les lire à l’aide de l’opérateur >>().

Voir également QNetworkAccessManager et QTcpServer.

Documentation sur les types membres

enum QAbstractSocket::BindFlag
flags QAbstractSocket::BindMode

Cette énumération décrit les différents indicateurs que vous pouvez passer pour modifier le comportement de la fonction ` QAbstractSocket::bind()`.

ConstanteValeurDescription
QAbstractSocket::ShareAddress0x1Autorise d’autres services à se lier à la même adresse et au même port. Cela s’avère utile lorsque plusieurs processus se partagent la charge d’un même service en écoutant sur la même adresse et le même port (par exemple, un serveur web disposant de plusieurs écouteurs pré-forkés peut considérablement améliorer le temps de réponse). Cependant, comme n’importe quel service est autorisé à se reconnecter, cette option soulève certaines considérations de sécurité. Notez qu’en combinant cette option avec ReuseAddressHint, vous autoriserez également votre service à se reconnecter à une adresse partagée existante. Sous Unix, cela équivaut à l’option de socket SO_REUSEADDR. Sous Windows, il s’agit du comportement par défaut ; cette option est donc ignorée.
QAbstractSocket::DontShareAddress0x2Lie l’adresse et le port de manière exclusive, de sorte qu’aucun autre service ne soit autorisé à se relier. En transmettant cette option à ` QAbstractSocket::bind()`, vous avez la garantie qu’en cas de réussite, votre service est le seul à écouter sur cette adresse et ce port. Aucun service n’est autorisé à se relier, même s’il transmet `ReuseAddressHint`. Cette option offre davantage de sécurité que ShareAddress, mais sur certains systèmes d’exploitation, elle nécessite d’exécuter le serveur avec des privilèges d’administrateur. Sous Unix et macOS, le non-partage est le comportement par défaut lors de la liaison d’une adresse et d’un port ; cette option est donc ignorée. Sous Windows, cette option utilise l’option de socket SO_EXCLUSIVEADDRUSE.
QAbstractSocket::ReuseAddressHint0x4Indique à ` QAbstractSocket ` qu’il doit tenter de relier le service même si l’adresse et le port sont déjà liés par un autre socket. Sous Windows et Unix, cela équivaut à l’option de socket SO_REUSEADDR.
QAbstractSocket::DefaultForPlatform0x0Option par défaut pour la plate-forme actuelle. Sous Unix et macOS, cela équivaut à (DontShareAddress + ReuseAddressHint), et sous Windows, cela équivaut à ShareAddress.

Le type `BindMode` est un `typedef` pour ` QFlags<BindFlag>`. Il stocke une combinaison (ou) de valeurs `BindFlag`.

enum QAbstractSocket::NetworkLayerProtocol

Cette énumération décrit les valeurs des protocoles de la couche réseau utilisées dans Qt Network.

ConstanteValeurDescription
QAbstractSocket::IPv4Protocol0IPv4
QAbstractSocket::IPv6Protocol1IPv6
QAbstractSocket::AnyIPProtocol2IPv4 ou IPv6
QAbstractSocket::UnknownNetworkLayerProtocol-1Autre que IPv4 et IPv6

Voir aussi QHostAddress::protocol().

enum QAbstractSocket::PauseMode
flags QAbstractSocket::PauseModes

Cette énumération décrit le comportement à adopter lorsque la socket doit suspendre la poursuite du transfert de données. La seule notification actuellement prise en charge est ` QSslSocket::sslErrors()`.

ConstanteValeurDescription
QAbstractSocket::PauseNever0x0Ne pas interrompre le transfert de données sur la socket. Il s’agit du comportement par défaut, qui correspond à celui de Qt 4.
QAbstractSocket::PauseOnSslErrors0x1Suspendre le transfert de données sur le socket à la réception d'une notification d'erreur SSL. C'est-à-dire QSslSocket::sslErrors().

Le type `PauseModes` est un `typedef` pour ` QFlags<PauseMode>`. Il stocke une combinaison (ou) de valeurs `PauseMode`.

enum QAbstractSocket::SocketError

Cette énumération décrit les erreurs de socket pouvant survenir.

ConstanteValeurDescription
QAbstractSocket::ConnectionRefusedError0La connexion a été refusée par le pair (ou le délai d'attente a expiré).
QAbstractSocket::RemoteHostClosedError1L'hôte distant a fermé la connexion. Notez que le socket client (c'est-à-dire ce socket) sera fermé une fois que la notification de fermeture distante aura été envoyée.
QAbstractSocket::HostNotFoundError2L'adresse de l'hôte est introuvable.
QAbstractSocket::SocketAccessError3L'opération sur le socket a échoué car l'application ne disposait pas des privilèges requis.
QAbstractSocket::SocketResourceError4Le système local a épuisé ses ressources (par exemple, trop de sockets).
QAbstractSocket::SocketTimeoutError5L'opération sur le socket a expiré.
QAbstractSocket::DatagramTooLargeError6Le datagramme dépassait la limite du système d'exploitation (qui peut être aussi faible que 8 192 octets).
QAbstractSocket::NetworkError7Une erreur s'est produite au niveau du réseau (par exemple, le câble réseau a été débranché par inadvertance).
QAbstractSocket::AddressInUseError8L'adresse spécifiée à la fonction ` QAbstractSocket::bind()` est déjà utilisée et a été définie comme exclusive.
QAbstractSocket::SocketAddressNotAvailableError9L'adresse spécifiée à la fonction ` QAbstractSocket::bind()` n'appartient pas à l'hôte.
QAbstractSocket::UnsupportedSocketOperationError10L’opération de socket demandée n’est pas prise en charge par le système d’exploitation local (par exemple, absence de prise en charge d’IPv6).
QAbstractSocket::ProxyAuthenticationRequiredError12Le socket utilise un proxy, et ce dernier nécessite une authentification.
QAbstractSocket::SslHandshakeFailedError13La négociation SSL/TLS a échoué, la connexion a donc été fermée (utilisé uniquement dans QSslSocket)
QAbstractSocket::UnfinishedSocketOperationError11Utilisé uniquement par QAbstractSocketEngine. La dernière opération tentée n’est pas encore terminée (toujours en cours en arrière-plan).
QAbstractSocket::ProxyConnectionRefusedError14Impossible de contacter le serveur proxy car la connexion à ce serveur a été refusée
QAbstractSocket::ProxyConnectionClosedError15La connexion au serveur proxy a été fermée de manière inattendue (avant que la connexion au pair final ne soit établie).
QAbstractSocket::ProxyConnectionTimeoutError16Le délai d'attente de la connexion au serveur proxy a expiré ou le serveur proxy a cessé de répondre pendant la phase d'authentification.
QAbstractSocket::ProxyNotFoundError17L'adresse du proxy définie avec setProxy() (ou le proxy de l'application) est introuvable.
QAbstractSocket::ProxyProtocolError18La négociation de connexion avec le serveur proxy a échoué, car la réponse du serveur proxy n'a pas pu être interprétée.
QAbstractSocket::OperationError19Une opération a été tentée alors que le socket se trouvait dans un état ne le permettant pas.
QAbstractSocket::SslInternalError20La bibliothèque SSL utilisée a signalé une erreur interne. Cela résulte probablement d’une mauvaise installation ou d’une configuration incorrecte de la bibliothèque.
QAbstractSocket::SslInvalidUserDataError21Des données non valides (certificat, clé, algorithme de chiffrement, etc.) ont été fournies et leur utilisation a entraîné une erreur dans la bibliothèque SSL.
QAbstractSocket::TemporaryError22Une erreur temporaire s’est produite (par exemple, l’opération se bloquerait alors que le socket est non bloquant).
QAbstractSocket::UnknownSocketError-1Une erreur non identifiée s’est produite.

Voir également QAbstractSocket::error() et QAbstractSocket::errorOccurred().

enum QAbstractSocket::SocketOption

Cette énumération représente les options pouvant être définies sur un socket. Si nécessaire, elles peuvent être définies après avoir reçu le signal ` connected()` provenant du socket ou après avoir reçu un nouveau socket via une fonction ` QTcpServer`.

ConstanteValeurDescription
QAbstractSocket::LowDelayOption0Tente d’optimiser le socket pour une faible latence. Pour une connexion « QTcpSocket », cela activerait l’option TCP_NODELAY et désactiverait l’algorithme de Nagle. Définis cette valeur sur 1 pour l’activer.
QAbstractSocket::KeepAliveOption1Définissez cette valeur sur 1 pour activer l’option de socket SO_KEEPALIVE
QAbstractSocket::MulticastTtlOption2Définissez cette valeur sur un nombre entier pour configurer l'option de socket IP_MULTICAST_TTL (TTL pour les datagrammes multicast).
QAbstractSocket::MulticastLoopbackOption3Définissez cette valeur sur 1 pour activer l'option de socket IP_MULTICAST_LOOP (boucle de retour multicast).
QAbstractSocket::TypeOfServiceOption4Cette option n’est pas prise en charge sous Windows. Elle correspond à l’option de socket IP_TOS. Pour connaître les valeurs possibles, consultez le tableau ci-dessous.
QAbstractSocket::SendBufferSizeSocketOption5Définit la taille du tampon d’envoi de la socket en octets au niveau du système d’exploitation. Cela correspond à l’option de socket SO_SNDBUF. Cette option n’affecte pas les tampons QIODevice ou QAbstractSocket. Cette valeur d’énumération a été introduite dans Qt 5.3.
QAbstractSocket::ReceiveBufferSizeSocketOption6Définit la taille du tampon de réception de la socket en octets au niveau du système d’exploitation. Cela correspond à l’option de socket SO_RCVBUF. Cette option n’affecte pas les tampons QIODevice ou QAbstractSocket (voir setReadBufferSize()). Cette valeur d’énumération a été introduite dans Qt 5.3.
QAbstractSocket::PathMtuSocketOption7Récupère la valeur de l’unité de transmission maximale du chemin (PMTU) actuellement connue par la pile IP, le cas échéant. Certaines piles IP permettent également de définir la MTU pour la transmission. Cette valeur d’énumération a été introduite dans Qt 5.11.
QAbstractSocket::KeepAliveIdleOption8Durée en secondes pendant laquelle la connexion doit rester inactive avant que TCP ne commence à envoyer des sondes de maintien de connexion si KeepAliveOption est activée. Cette valeur d’énumération a été introduite dans Qt 6.11.
QAbstractSocket::KeepAliveIntervalOption9Le délai, en secondes, entre chaque sonde de maintien de connexion, si l’option KeepAliveOption est activée. Cette option n’est pas prise en charge par tous les systèmes d’exploitation. Cette valeur d’énumération a été introduite dans Qt 6.11.
QAbstractSocket::KeepAliveCountOption10Nombre maximal de sondes de maintien de connexion à envoyer avant que TCP ne coupe la connexion, si l'option KeepAliveOption est activée. Cette option n'est pas prise en charge par tous les systèmes d'exploitation. Cette valeur d'énumération a été introduite dans Qt 6.11.

Les valeurs possibles pour TypeOfServiceOption sont les suivantes :

ValeurDescription
224Contrôle du réseau
192Contrôle inter-réseaux
160CRITIC/ECP
128Contournement Flash
96Flash
64Immédiat
32Prioritaire
0Routine

Voir également QAbstractSocket::setSocketOption() et QAbstractSocket::socketOption().

enum QAbstractSocket::SocketState

Cette énumération décrit les différents états dans lesquels un socket peut se trouver.

ConstanteValeurDescription
QAbstractSocket::UnconnectedState0La socket n'est pas connectée.
QAbstractSocket::HostLookupState1Le socket effectue une recherche de nom d'hôte.
QAbstractSocket::ConnectingState2Le socket a commencé à établir une connexion.
QAbstractSocket::ConnectedState3Une connexion est établie.
QAbstractSocket::BoundState4Le socket est lié à une adresse et à un port.
QAbstractSocket::ClosingState6Le socket est sur le point de se fermer (des données peuvent encore être en attente d'écriture).
QAbstractSocket::ListeningState5À usage interne uniquement.

Voir aussi QAbstractSocket::state().

enum QAbstractSocket::SocketType

Cette énumération décrit le protocole de la couche de transport.

ConstanteValeurDescription
QAbstractSocket::TcpSocket0TCP
QAbstractSocket::UdpSocket1UDP
QAbstractSocket::SctpSocket2SCTP
QAbstractSocket::UnknownSocketType-1Autres que TCP, UDP et SCTP

Voir aussi QAbstractSocket::socketType().

Documentation sur les fonctions membres

QAbstractSocket::QAbstractSocket(QAbstractSocket::SocketType socketType, QObject *parent)

Crée un nouveau socket abstrait de type socketType. L'argument ` parent ` est transmis au constructeur de QObject.

Voir aussi ` socketType()`, ` QTcpSocket` et ` QUdpSocket`.

[virtual noexcept] QAbstractSocket::~QAbstractSocket()

Supprime le socket.

void QAbstractSocket::abort()

Interrompt la connexion en cours et réinitialise le socket. Contrairement à la fonction ` disconnectFromHost()`, cette fonction ferme immédiatement le socket, en supprimant toutes les données en attente dans le tampon d'écriture.

Voir également disconnectFromHost() et close().

[virtual] bool QAbstractSocket::bind(const QHostAddress &address, quint16 port = 0, QAbstractSocket::BindMode mode = DefaultForPlatform)

Effectue une liaison avec l'adresse address sur le port port, en utilisant le nom de domaine BindMode mode .

Pour les sockets UDP, une fois la liaison établie, le signal QUdpSocket::readyRead() est émis dès qu’un datagramme UDP arrive à l’adresse et au port spécifiés. Cette fonction est donc utile pour écrire des serveurs UDP.

Pour les sockets TCP, cette fonction peut être utilisée pour spécifier l’interface à utiliser pour une connexion sortante, ce qui est utile en cas de présence de plusieurs interfaces réseau.

Par défaut, le socket est lié à l’adresse DefaultForPlatform BindMode . Si aucun port n’est spécifié, un port aléatoire est choisi.

En cas de succès, la fonction renvoie « true » et le socket passe à l’état « BoundState » ; dans le cas contraire, elle renvoie « false ».

bool QAbstractSocket::bind(quint16 port = 0, QAbstractSocket::BindMode mode = DefaultForPlatform)

Se lie à l'adresse QHostAddress:Any sur le port port, en utilisant le BindMode mode .

Par défaut, la socket est liée à l'adresse DefaultForPlatform BindMode . Si aucun port n'est spécifié, un port aléatoire est choisi.

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

[since 6.2] bool QAbstractSocket::bind(QHostAddress::SpecialAddress addr, quint16 port = 0, QAbstractSocket::BindMode mode = DefaultForPlatform)

Se lie à l'adresse spéciale addr sur le port port, en utilisant le BindMode mode .

Par défaut, la socket est liée à l'adresse DefaultForPlatform sur le port BindMode. Si aucun port n'est spécifié, un port aléatoire est choisi.

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

Cette fonction a été introduite dans Qt 6.2.

[override virtual] qint64 QAbstractSocket::bytesAvailable() const

Réimplémente : ` QIODevice::bytesAvailable()` const.

Renvoie le nombre d’octets entrants en attente de lecture.

Voir également bytesToWrite() et read().

[override virtual] qint64 QAbstractSocket::bytesToWrite() const

Réimplémente : ` QIODevice::bytesToWrite()` const.

Renvoie le nombre d’octets en attente d’écriture. Ces octets sont écrits lorsque le contrôle revient à la boucle d’événements ou lorsque la fonction flush() est appelée.

Voir également bytesAvailable() et flush().

[override virtual] void QAbstractSocket::close()

Réimplémente : QIODevice::close().

Ferme le périphérique d'E/S associé au socket et appelle disconnectFromHost() pour fermer la connexion du socket.

Voir QIODevice::close() pour une description des actions qui se produisent lorsqu'un périphérique d'E/S est fermé.

Voir également abort().

[virtual] void QAbstractSocket::connectToHost(const QString &hostName, quint16 port, QIODeviceBase::OpenMode openMode = ReadWrite, QAbstractSocket::NetworkLayerProtocol protocol = AnyIPProtocol)

Tente d'établir une connexion à hostName via l'adresse IP indiquée port. Le paramètre protocol permet de spécifier le protocole réseau à utiliser (par exemple, IPv4 ou IPv6).

Le socket est ouvert sur l’ openMode indiquée et accède d’abord à HostLookupState, puis effectue une recherche du nom d’hôte de hostName. Si la recherche aboutit, hostFound() est émis et QAbstractSocket accède à ConnectingState. Il tente ensuite de se connecter à l’adresse ou aux adresses renvoyées par la recherche. Enfin, si une connexion est établie, QAbstractSocket accède à ConnectedState et émet connected().

À tout moment, le socket peut émettre errorOccurred() pour signaler qu’une erreur s’est produite.

hostName peut être une adresse IP sous forme de chaîne de caractères (par exemple, « 43.195.83.32 ») ou un nom d’hôte (par exemple, « example.com »). La fonction QAbstractSocket n’effectuera une recherche que si nécessaire. La fonction port utilise l’ordre natif des octets.

Voir également state(), peerName(), peerAddress(), peerPort() et waitForConnected().

void QAbstractSocket::connectToHost(const QHostAddress &address, quint16 port, QIODeviceBase::OpenMode openMode = ReadWrite)

Tentative de connexion à address sur le port port.

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

[signal] void QAbstractSocket::connected()

Ce signal est émis après l'appel de la fonction connectToHost() et une fois la connexion établie avec succès.

Remarque : sur certains systèmes d'exploitation, le signal connected() peut être émis directement par l'appel connectToHost() pour les connexions à localhost.

Voir aussi ` connectToHost()` et ` disconnected()`.

[virtual] void QAbstractSocket::disconnectFromHost()

Tente de fermer le socket. S’il reste des données en attente d’écriture, ` QAbstractSocket ` passe en état « ClosingState » et attend que toutes les données aient été écrites. À terme, il passe en état « UnconnectedState » et émet le signal ` disconnected()`.

Voir également connectToHost().

[signal] void QAbstractSocket::disconnected()

Ce signal est émis lorsque la connexion a été interrompue.

Avertissement : si vous devez supprimer l'sender() de ce signal dans un slot qui y est connecté, utilisez la fonction deleteLater().

Voir également connectToHost(), disconnectFromHost() et abort().

QAbstractSocket::SocketError QAbstractSocket::error() const

Renvoie le type de l'erreur qui s'est produite en dernier.

Voir également state() et errorString().

[signal] void QAbstractSocket::errorOccurred(QAbstractSocket::SocketError socketError)

Ce signal est émis lorsqu’une erreur s’est produite. Le paramètre ` socketError ` décrit le type d’erreur survenue.

Lorsque ce signal est émis, il se peut que le socket ne soit pas prêt pour une tentative de reconnexion. Dans ce cas, les tentatives de reconnexion doivent être effectuées à partir de la boucle d'événements. Par exemple, utilisez QChronoTimer::singleShot() avec un délai d'expiration de 0 ns.

QAbstractSocket::SocketError n'est pas un métatype enregistré ; pour les connexions en file d'attente, vous devrez donc l'enregistrer à l'aide des fonctions Q_DECLARE_METATYPE() et qRegisterMetaType().

Voir également error(), errorString() et Création de types Qt personnalisés.

bool QAbstractSocket::flush()

Cette fonction écrit autant de données que possible depuis le tampon d'écriture interne vers la socket réseau sous-jacente, sans blocage. Si des données ont été écrites, cette fonction renvoie ` true` ; dans le cas contraire, elle renvoie `false`.

Appelez cette fonction si vous avez besoin que ` QAbstractSocket ` commence immédiatement à envoyer les données mises en mémoire tampon. Le nombre d’octets écrits avec succès dépend du système d’exploitation. Dans la plupart des cas, vous n’avez pas besoin d’appeler cette fonction, car ` QAbstractSocket ` commencera automatiquement à envoyer les données dès que le contrôle reviendra à la boucle d’événements. En l’absence de boucle d’événements, appelez plutôt ` waitForBytesWritten()`.

Voir également ` write()` et ` waitForBytesWritten()`.

[signal] void QAbstractSocket::hostFound()

Ce signal est émis après l'appel de la fonction connectToHost() et une fois que la recherche de l'hôte a abouti.

Remarque : depuis Qt 4.6.3, QAbstractSocket peut émettre hostFound() directement à partir de l'appel connectToHost(), car un résultat DNS pourrait avoir été mis en cache.

Voir également connected().

[override virtual] bool QAbstractSocket::isSequential() const

Réimplémente : QIODevice::isSequential() const.

bool QAbstractSocket::isValid() const

Renvoie « true » si le socket est valide et prêt à être utilisé ; sinon, renvoie « false ».

Remarque : l’état du socket doit être « ConnectedState » avant que la lecture et l’écriture puissent avoir lieu.

Voir également state().

QHostAddress QAbstractSocket::localAddress() const

Renvoie l'adresse hôte du socket local si elle est disponible ; sinon, renvoie QHostAddress::Null.

Il s'agit généralement de l'adresse IP principale de l'hôte, mais elle peut être QHostAddress::LocalHost (127.0.0.1) pour les connexions à l'hôte local.

Voir également localPort(), peerAddress() et setLocalAddress().

quint16 QAbstractSocket::localPort() const

Renvoie le numéro de port de l'hôte (dans l'ordre natif des octets) de la socket locale s'il est disponible ; sinon, renvoie 0.

Voir également localAddress(), peerPort() et setLocalPort().

QAbstractSocket::PauseModes QAbstractSocket::pauseMode() const

Renvoie le mode de pause de cette socket.

Voir également setPauseMode() et resume().

QHostAddress QAbstractSocket::peerAddress() const

Renvoie l'adresse du pair connecté si le socket est en mode « ConnectedState » ; sinon, renvoie « QHostAddress::Null ».

Voir également peerName(), peerPort(), localAddress() et setPeerAddress().

QString QAbstractSocket::peerName() const

Renvoie le nom du pair tel que spécifié par la fonction connectToHost(), ou un objet QString vide si la fonction connectToHost() n'a pas été appelée.

Voir également peerAddress(), peerPort() et setPeerName().

quint16 QAbstractSocket::peerPort() const

Renvoie le port du pair connecté si le socket se trouve dans l'état « ConnectedState » ; sinon, renvoie 0.

Voir également peerAddress(), localPort() et setPeerPort().

QString QAbstractSocket::protocolTag() const

Renvoie l'identifiant de protocole associé à cette socket. Si cet identifiant est défini, il est transmis à ` QNetworkProxyQuery ` lors de la création interne de cette dernière afin d'indiquer l'identifiant de protocole à utiliser.

Voir également setProtocolTag() et QNetworkProxyQuery.

QNetworkProxy QAbstractSocket::proxy() const

Renvoie le proxy réseau associé à cette socket. Par défaut, QNetworkProxy::DefaultProxy est utilisé, ce qui signifie que cette socket interrogera les paramètres de proxy par défaut de l'application.

Voir également setProxy(), QNetworkProxy et QNetworkProxyFactory.

[signal] void QAbstractSocket::proxyAuthenticationRequired(const QNetworkProxy &proxy, QAuthenticator *authenticator)

Ce signal peut être émis lorsqu'une connexion « proxy » nécessitant une authentification est utilisée. L'objet « authenticator » peut alors être renseigné avec les informations requises pour permettre l'authentification et poursuivre la connexion.

Remarque : il n'est pas possible d'utiliser une connexion en file d'attente (QueuedConnection) pour se connecter à ce signal, car la connexion échouera si l'authentificateur n'a pas été renseigné avec les nouvelles informations lorsque le signal revient.

Voir également QAuthenticator et QNetworkProxy.

qint64 QAbstractSocket::readBufferSize() const

Renvoie la taille du tampon de lecture interne. Cela limite la quantité de données que le client peut recevoir avant que vous n'appeliez read() ou readAll().

Une taille de tampon de lecture égale à 0 (valeur par défaut) signifie que le tampon n'a pas de limite de taille, ce qui garantit qu'aucune donnée n'est perdue.

Voir également setReadBufferSize() et read().

[override virtual protected] qint64 QAbstractSocket::readData(char *data, qint64 maxSize)

Réimplémentation de : QIODevice::readData(char *data, qint64 maxSize).

[override virtual protected] qint64 QAbstractSocket::readLineData(char *data, qint64 maxlen)

Réimplémentation de : QIODevice::readLineData(char *data, qint64 maxSize).

[virtual] void QAbstractSocket::resume()

Poursuit le transfert de données sur le socket. Cette méthode ne doit être utilisée qu’après avoir configuré le socket pour qu’il se mette en pause à la réception d’une notification et qu’une notification ait effectivement été reçue. La seule notification actuellement prise en charge est ` QSslSocket::sslErrors()` (). L’appel de cette méthode alors que le socket n’est pas en pause entraîne un comportement indéfini.

Voir également pauseMode() et setPauseMode().

[protected] void QAbstractSocket::setLocalAddress(const QHostAddress &address)

Définit l'adresse côté local d'une connexion à address.

Vous pouvez appeler cette fonction dans une sous-classe de ` QAbstractSocket ` pour modifier la valeur renvoyée par la fonction ` localAddress()` une fois la connexion établie. Cette fonctionnalité est couramment utilisée par les connexions proxy pour la configuration des connexions virtuelles.

Notez que cette fonction ne lie pas l'adresse locale du socket avant l'établissement d'une connexion (par exemple, ` QAbstractSocket::bind()`).

Voir également localAddress(), setLocalPort() et setPeerAddress().

[protected] void QAbstractSocket::setLocalPort(quint16 port)

Définit le port côté local d'une connexion sur port.

Vous pouvez appeler cette fonction dans une sous-classe de ` QAbstractSocket ` pour modifier la valeur renvoyée par la fonction ` localPort()` une fois la connexion établie. Cette fonctionnalité est couramment utilisée par les connexions proxy pour les paramètres de connexion virtuelle.

Notez que cette fonction ne lie pas le port local du socket avant l'établissement d'une connexion (par exemple, ` QAbstractSocket::bind()`).

Voir également localPort(), localAddress(), setLocalAddress() et setPeerPort().

void QAbstractSocket::setPauseMode(QAbstractSocket::PauseModes pauseMode)

Détermine s'il faut mettre en pause à la réception d'une notification. Le paramètre ` pauseMode ` spécifie les conditions dans lesquelles le socket doit être mis en pause. La seule notification actuellement prise en charge est QSslSocket::sslErrors(). Si cette option est définie sur PauseOnSslErrors, le transfert de données sur le socket sera mis en pause et devra être réactivé explicitement en appelant resume(). Par défaut, cette option est définie sur PauseNever. Cette option doit être appelée avant de se connecter au serveur, sinon cela entraînera un comportement indéfini.

Voir également pauseMode() et resume().

[protected] void QAbstractSocket::setPeerAddress(const QHostAddress &address)

Définit l'adresse du côté distant de la connexion sur address.

Vous pouvez appeler cette fonction dans une sous-classe de ` QAbstractSocket ` pour modifier la valeur de retour de la fonction ` peerAddress()` une fois la connexion établie. Cette fonctionnalité est couramment utilisée par les connexions proxy pour les paramètres de connexion virtuelle.

Voir également peerAddress(), setPeerPort() et setLocalAddress().

[protected] void QAbstractSocket::setPeerName(const QString &name)

Définit le nom d'hôte du pair distant sur name.

Vous pouvez appeler cette fonction dans une sous-classe de QAbstractSocket pour modifier la valeur de retour de la fonction peerName() une fois la connexion établie. Cette fonctionnalité est couramment utilisée par les connexions proxy pour les paramètres de connexion virtuelle.

Voir également peerName().

[protected] void QAbstractSocket::setPeerPort(quint16 port)

Définit le port côté distant de la connexion sur port.

Vous pouvez appeler cette fonction dans une sous-classe de ` QAbstractSocket ` pour modifier la valeur de retour de la fonction ` peerPort()` une fois la connexion établie. Cette fonctionnalité est couramment utilisée par les connexions proxy pour les paramètres de connexion virtuelle.

Voir également peerPort(), setPeerAddress() et setLocalPort().

void QAbstractSocket::setProtocolTag(const QString &tag)

Définit l'identifiant de protocole de cette socket sur « tag ».

Voir également protocolTag().

void QAbstractSocket::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 » :

socket->setProxy(QNetworkProxy::NoProxy);

La valeur par défaut du proxy est « QNetworkProxy::DefaultProxy », ce qui signifie que le socket utilisera les paramètres de l’application : si un proxy est défini avec « QNetworkProxy::setApplicationProxy », il l’utilisera ; sinon, si une fabrique est définie avec « QNetworkProxyFactory::setApplicationProxyFactory », il interrogera cette fabrique avec le type « QNetworkProxyQuery::TcpSocket ».

Voir également proxy(), QNetworkProxy et QNetworkProxyFactory::queryProxy().

[virtual] void QAbstractSocket::setReadBufferSize(qint64 size)

Définit la taille du tampon de lecture interne de la fonction ` QAbstractSocket` à size octets.

Si la taille du tampon est limitée à une certaine valeur, ` QAbstractSocket ` ne mettra pas en tampon plus de données que cette taille. Exceptionnellement, une taille de tampon égale à 0 signifie que le tampon de lecture est illimité et que toutes les données entrantes sont mises en tampon. C'est la valeur par défaut.

Cette option est utile si vous ne lisez les données qu’à certains moments (par exemple, dans une application de streaming en temps réel) ou si vous souhaitez protéger votre socket contre la réception d’un volume trop important de données, ce qui pourrait finir par entraîner un épuisement de la mémoire de votre application.

Seule la fonction ` QTcpSocket ` utilise le tampon interne de ` QAbstractSocket` ; la fonction ` QUdpSocket ` n’utilise aucun tampon, mais s’appuie plutôt sur la mise en tampon implicite fournie par le système d’exploitation. De ce fait, l’appel de cette fonction sur ` QUdpSocket ` n’a aucun effet.

Voir également readBufferSize() et read().

[virtual] bool QAbstractSocket::setSocketDescriptor(qintptr socketDescriptor, QAbstractSocket::SocketState socketState = ConnectedState, QIODeviceBase::OpenMode openMode = ReadWrite)

Initialise QAbstractSocket avec le descripteur de socket natif socketDescriptor. Renvoie true si socketDescriptor est reconnu comme un descripteur de socket valide ; sinon, renvoie false. La socket est ouverte dans le mode spécifié par openMode et passe à l'état spécifié par socketState. Les tampons de lecture et d'écriture sont vidés, ce qui entraîne la suppression de toutes les données en attente.

Remarque : il n’est pas possible d’initialiser deux sockets abstraites avec le même descripteur de socket natif.

Voir également socketDescriptor().

[protected] void QAbstractSocket::setSocketError(QAbstractSocket::SocketError socketError)

Définit le type de la dernière erreur survenue dans ` socketError`.

Voir également setSocketState() et setErrorString().

[virtual] void QAbstractSocket::setSocketOption(QAbstractSocket::SocketOption option, const QVariant &value)

Définit la fonction ` option ` indiquée sur la valeur décrite par ` value`.

Remarque : comme les options sont définies sur un socket interne, elles ne s’appliquent que si le socket a été créé. Cela n’est garanti qu’après un appel à bind(), ou lorsque connected() a été émis.

Voir également socketOption().

[protected] void QAbstractSocket::setSocketState(QAbstractSocket::SocketState state)

Définit l'état de la socket sur « state ».

Voir aussi state().

[override virtual protected] qint64 QAbstractSocket::skipData(qint64 maxSize)

Réimplémente : QIODevice::skipData(qint64 maxSize).

[virtual] qintptr QAbstractSocket::socketDescriptor() const

Renvoie le descripteur de socket natif de l'objet ` QAbstractSocket ` s'il est disponible ; sinon, renvoie -1.

Si le socket utilise la fonction ` QNetworkProxy`, le descripteur renvoyé peut ne pas être utilisable avec les fonctions de socket natives.

Le descripteur de socket n'est pas disponible lorsque QAbstractSocket est en mode « UnconnectedState ».

Voir aussi setSocketDescriptor().

[virtual] QVariant QAbstractSocket::socketOption(QAbstractSocket::SocketOption option)

Renvoie la valeur de l'option « option ».

Voir aussi setSocketOption().

QAbstractSocket::SocketType QAbstractSocket::socketType() const

Renvoie le type de socket (TCP, UDP ou autre).

Voir également QTcpSocket et QUdpSocket.

QAbstractSocket::SocketState QAbstractSocket::state() const

Renvoie l'état du socket.

Voir aussi error().

[signal] void QAbstractSocket::stateChanged(QAbstractSocket::SocketState socketState)

Ce signal est émis chaque fois que l'état de ` QAbstractSocket` change. Le paramètre ` socketState ` correspond au nouvel état.

QAbstractSocket::SocketState n'est pas un métatype enregistré ; par conséquent, pour les connexions mises en file d'attente, vous devrez l'enregistrer à l'aide des fonctions Q_DECLARE_METATYPE() et qRegisterMetaType().

Voir également state() et Création de types Qt personnalisés.

[override virtual] bool QAbstractSocket::waitForBytesWritten(int msecs = 30000)

Réimplémentation de : QIODevice::waitForBytesWritten(int msecs).

Cette fonction reste bloquée jusqu’à ce qu’au moins un octet ait été écrit sur le socket et que le signal bytesWritten() ait été émis. La fonction expire après msecs millisecondes ; le délai d’expiration par défaut est de 30 000 millisecondes.

La fonction renvoie « true » si le signal « bytesWritten() » est émis ; sinon, elle renvoie « false » (si une erreur s’est produite ou si le délai d’attente a expiré).

Remarque : cette fonction peut échouer de manière aléatoire sous Windows. Envisagez d’utiliser la boucle d’événements et le signal bytesWritten() si votre logiciel est destiné à fonctionner sous Windows.

Voir aussi ` waitForReadyRead()`.

[virtual] bool QAbstractSocket::waitForConnected(int msecs = 30000)

Attend que le socket soit connecté, pendant au maximum msecs millisecondes. Si la connexion a été établie, cette fonction renvoie true; sinon, elle renvoie false. Si elle renvoie false, vous pouvez appeler error() pour déterminer la cause de l'erreur.

L'exemple suivant attend jusqu'à une seconde que la connexion soit établie :

socket->connectToHost("imap", 143);
if (socket->waitForConnected(1000))
    qDebug("Connected!");

Si msecs vaut -1, cette fonction n'appliquera pas de délai d'expiration.

Remarque : cette fonction peut attendre un peu plus longtemps que ` msecs`, en fonction du temps nécessaire pour effectuer la recherche de l'hôte.

Remarque : les appelsmultiples à cette fonction n'entraînent pas d'accumulation du temps d'attente. Si la fonction atteint le délai d'expiration, le processus de connexion sera interrompu.

Remarque : cette fonction peut échouer de manière aléatoire sous Windows. Envisagez d'utiliser la boucle d'événements et le signal ` connected()` si votre logiciel est destiné à fonctionner sous Windows.

Voir également connectToHost() et connected().

[virtual] bool QAbstractSocket::waitForDisconnected(int msecs = 30000)

Attend que la connexion soit déconnectée, pendant un délai maximal de msecs millisecondes. Si la connexion a été déconnectée avec succès, cette fonction renvoie true; dans le cas contraire, elle renvoie false (si l'opération a dépassé le délai d'attente, si une erreur s'est produite ou si ce QAbstractSocket est déjà déconnecté). Si elle renvoie false, vous pouvez appeler error() pour déterminer la cause de l'erreur.

L'exemple suivant attend jusqu'à une seconde que la connexion soit fermée :

socket->disconnectFromHost();
if (socket->state()== QAbstractSocket::UnconnectedState
    || socket->waitForDisconnected(1000)) {
        qDebug("Disconnected!");
}

Si msecs vaut -1, cette fonction n'est soumise à aucun délai d'expiration.

Remarque : cette fonction peut échouer de manière aléatoire sous Windows. Envisagez d'utiliser la boucle d'événements et le signal ` disconnected()` si votre logiciel est destiné à fonctionner sous Windows.

Voir également disconnectFromHost() et close().

[override virtual] bool QAbstractSocket::waitForReadyRead(int msecs = 30000)

Réimplémentation de : QIODevice::waitForReadyRead(int msecs).

Cette fonction reste bloquée jusqu’à ce que de nouvelles données soient disponibles en lecture et que le signal readyRead() ait été émis. La fonction expire après msecs millisecondes ; le délai d’expiration par défaut est de 30000 millisecondes.

La fonction renvoie true si le signal readyRead() est émis et que de nouvelles données sont disponibles pour la lecture ; sinon, elle renvoie false (si une erreur s’est produite ou si l’opération a expiré).

Remarque : cette fonction peut échouer de manière aléatoire sous Windows. Envisagez d'utiliser la boucle d'événements et le signal ` readyRead()` si votre logiciel doit fonctionner sous Windows.

Voir également waitForBytesWritten().

[override virtual protected] qint64 QAbstractSocket::writeData(const char *data, qint64 size)

Réimplémentation de : QIODevice::writeData(const char *data, qint64 maxSize).

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