Sur cette page

QAbstractSocket Class

La classe QAbstractSocket fournit les fonctionnalités de base communes à tous les types de socket. Plus d'informations...

En-tête : #include <QAbstractSocket>
CMake : find_package(Qt6 REQUIRED COMPONENTS Network)
target_link_libraries(mytarget PRIVATE Qt6::Network)
qmake : QT += network
Hérite : QIODevice
Héritée 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 pour QTcpSocket et QUdpSocket et contient toutes les fonctionnalités communes de ces deux classes. Si vous avez besoin d'une socket, vous avez deux options :

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

L'API de QAbstractSocket unifie la plupart des différences entre les deux protocoles. Par exemple, bien que UDP soit sans connexion, connectToHost() établit une connexion virtuelle pour les sockets UDP, ce qui vous permet d'utiliser QAbstractSocket plus ou moins de la même manière, quel que soit le protocole sous-jacent. En interne, QAbstractSocket se souvient de l'adresse et du port passés à connectToHost(), et des fonctions comme read() et write() utilisent ces valeurs.

À tout moment, QAbstractSocket a un état (renvoyé par state()). L'état initial est UnconnectedState. Après avoir appelé connectToHost(), la socket entre d'abord dans HostLookupState. Si l'hôte est trouvé, QAbstractSocket entre dans ConnectingState et émet le signal hostFound(). Lorsque la connexion a été établie, il entre dans ConnectedState et émet connected(). Si une erreur survient à un stade quelconque, le signal errorOccurred() est émis. Chaque fois que l'état change, stateChanged() est émis. Par commodité, isValid() renvoie true si la socket est prête pour la lecture et l'écriture, mais notez que l'état de la socket doit être ConnectedState avant que la lecture et l'écriture puissent avoir lieu.

Vous pouvez lire ou écrire des données en appelant read() ou write(), ou en utilisant les fonctions de commodité readLine() et readAll(). QAbstractSocket hérite également des fonctions getChar(), putChar() et ungetChar() de QIODevice, qui fonctionnent sur des octets uniques. 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 morceau de données est arrivé. bytesAvailable() renvoie alors le nombre d'octets disponibles pour la lecture. En règle générale, vous connectez le signal readyRead() à un slot et lisez toutes les données disponibles dans ce slot. Si vous ne lisez pas toutes les données en même temps, les données restantes seront toujours disponibles plus tard, et toutes les nouvelles données entrantes seront ajoutées au tampon de lecture interne de QAbstractSocket. Pour limiter la taille du tampon de lecture, appelez setReadBufferSize().

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

Le port et l'adresse de l'homologue connecté sont obtenus en appelant peerPort() et peerAddress(). peerName() renvoie le nom d'hôte de l'homologue, tel qu'il a été transmis à connectToHost(). localPort() et localAddress() renvoient 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 bloquants :

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

Nous montrons 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, la connexion a été fermée ou une erreur s'est produite.

La programmation avec une socket bloquante est radicalement différente de la programmation avec une socket non bloquante. Une socket bloquante ne nécessite pas de boucle d'événements et conduit généralement à un code plus simple. Cependant, dans une application GUI, les sockets bloquantes ne doivent être utilisées que dans des threads non-GUI, afin d'éviter de geler l'interface utilisateur. Voir les exemples fortuneclient et blockingfortuneclient pour une vue d'ensemble des deux approches.

Remarque : nous décourageons l'utilisation des fonctions de blocage en même temps que les signaux. L'une des deux possibilités doit être utilisée.

QAbstractSocket peut être utilisé avec les opérateurs de flux de QTextStream et QDataStream(operator<<() et operator>>()). Il y a cependant un problème à prendre en compte : vous devez vous assurer que suffisamment de données sont disponibles avant d'essayer de les lire à l'aide de operator>>().

Voir également QNetworkAccessManager et QTcpServer.

Documentation sur les types de membres

enum QAbstractSocket::BindFlag
flags QAbstractSocket::BindMode

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

ConstanteValeurDescription
QAbstractSocket::ShareAddress0x1Permet à d'autres services de se lier à la même adresse et au même port. Cette option est utile lorsque plusieurs processus partagent la charge d'un service unique en écoutant la même adresse et le même port (par exemple, un serveur web avec plusieurs auditeurs pré-forkés peut considérablement améliorer le temps de réponse). Cependant, comme tout service est autorisé à se lier à nouveau, cette option est sujette à certaines considérations de sécurité. Notez qu'en combinant cette option avec ReuseAddressHint, vous permettrez également à votre service de relier une adresse partagée existante. Sous Unix, cette option est équivalente à l'option de socket SO_REUSEADDR. Sous Windows, il s'agit du comportement par défaut, et cette option est donc ignorée.
QAbstractSocket::DontShareAddress0x2Lier l'adresse et le port exclusivement, de sorte qu'aucun autre service ne soit autorisé à les lier à nouveau. En passant cette option à QAbstractSocket::bind(), vous avez la garantie qu'en cas de succès, votre service est le seul à écouter l'adresse et le port. Aucun service n'est autorisé à se reconnecter, même s'il passe l'option ReuseAddressHint. Cette option offre plus de sécurité que ShareAddress, mais sur certains systèmes d'exploitation, elle nécessite que vous exécutiez le serveur avec des privilèges d'administrateur. Sous Unix et macOS, le non-partage est le comportement par défaut pour la liaison d'une adresse et d'un port, et cette option est donc ignorée. Sous Windows, cette option utilise l'option de socket SO_EXCLUSIVEADDRUSE.
QAbstractSocket::ReuseAddressHint0x4Indique à QAbstractSocket qu'il doit essayer de lier à nouveau le service même si l'adresse et le port sont déjà liés à une autre socket. Sous Windows et Unix, cette option est équivalente à l'option de socket SO_REUSEADDR.
QAbstractSocket::DefaultForPlatform0x0L'option par défaut pour la plateforme actuelle. Sous Unix et macOS, cette option est équivalente à (DontShareAddress + ReuseAddressHint), et sous Windows, elle est équivalente à 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 du protocole de la couche réseau utilisées dans Qt Network.

ConstanteValeurDescription du protocole
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 de la socket lorsqu'elle doit suspendre la poursuite du transfert de données. La seule notification actuellement supportée est QSslSocket::sslErrors().

ConstanteValeurDescription
QAbstractSocket::PauseNever0x0Ne pas mettre en pause le transfert de données sur la socket. C'est la valeur par défaut et elle correspond au comportement de Qt 4.
QAbstractSocket::PauseOnSslErrors0x1Mettre en pause le transfert de données sur la socket lors de 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 qui peuvent se produire.

ConstanteValeurDescription de l'erreur
QAbstractSocket::ConnectionRefusedError0La connexion a été refusée par l'homologue (ou s'est interrompue).
QAbstractSocket::RemoteHostClosedError1L'hôte distant a fermé la connexion. Notez que la socket du client (c'est-à-dire cette socket) sera fermée après l'envoi de la notification de fermeture à distance.
QAbstractSocket::HostNotFoundError2L'adresse de l'hôte n'a pas été trouvée.
QAbstractSocket::SocketAccessError3L'opération de socket a échoué parce que l'application n'avait pas les privilèges requis.
QAbstractSocket::SocketResourceError4Le système local a manqué de ressources (par exemple, trop de sockets).
QAbstractSocket::SocketTimeoutError5L'opération de socket a dépassé le temps imparti.
QAbstractSocket::DatagramTooLargeError6Le datagramme était plus grand que la limite du système d'exploitation (qui peut être aussi bas que 8192 octets).
QAbstractSocket::NetworkError7Une erreur s'est produite sur le réseau (par exemple, le câble réseau a été accidentellement débranché).
QAbstractSocket::AddressInUseError8L'adresse spécifiée à QAbstractSocket::bind() est déjà utilisée et a été définie comme exclusive.
QAbstractSocket::SocketAddressNotAvailableError9L'adresse spécifiée à QAbstractSocket::bind() n'appartient pas à l'hôte.
QAbstractSocket::UnsupportedSocketOperationError10L'opération de socket demandée n'est pas supportée par le système d'exploitation local (par exemple, manque de support IPv6).
QAbstractSocket::ProxyAuthenticationRequiredError12La socket utilise un proxy, et le proxy nécessite une authentification.
QAbstractSocket::SslHandshakeFailedError13L'échange SSL/TLS a échoué, la connexion a donc été fermée (utilisé uniquement à l'adresse QSslSocket).
QAbstractSocket::UnfinishedSocketOperationError11Utilisé par QAbstractSocketEngine uniquement, 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 avec l'homologue final n'ait été établie).
QAbstractSocket::ProxyConnectionTimeoutError16La connexion au serveur proxy a été interrompue ou le serveur proxy a cessé de répondre pendant la phase d'authentification.
QAbstractSocket::ProxyNotFoundError17L'adresse proxy définie avec setProxy() (ou le proxy de l'application) n'a pas été trouvée.
QAbstractSocket::ProxyProtocolError18La négociation de la connexion avec le serveur proxy a échoué parce que la réponse du serveur proxy n'a pas pu être comprise.
QAbstractSocket::OperationError19Une opération a été tentée alors que la socket était dans un état qui ne la permettait pas.
QAbstractSocket::SslInternalError20La bibliothèque SSL utilisée a signalé une erreur interne. Il s'agit probablement d'une mauvaise installation ou d'une mauvaise configuration de la bibliothèque.
QAbstractSocket::SslInvalidUserDataError21Des données non valides (certificat, clé, cryptogramme, 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 serait bloquante et la socket n'est pas bloquante).
QAbstractSocket::UnknownSocketError-1Une erreur non identifiée s'est produite.

Voir aussi QAbstractSocket::error() et QAbstractSocket::errorOccurred().

enum QAbstractSocket::SocketOption

Cette énumération représente les options qui peuvent être définies sur une socket. Si vous le souhaitez, elles peuvent être définies après avoir reçu le signal connected() de la part de la socket ou après avoir reçu une nouvelle socket de la part d'un QTcpServer.

ConstanteValeurDescription de l'option
QAbstractSocket::LowDelayOption0Essaie d'optimiser la socket pour une faible latence. Pour QTcpSocket, cela signifie que l'option TCP_NODELAY est activée et que l'algorithme de Nagle est désactivé. Mettez cette valeur à 1 pour activer l'algorithme de Nagle.
QAbstractSocket::KeepAliveOption1Mettez cette valeur à 1 pour activer l'option de socket SO_KEEPALIVE.
QAbstractSocket::MulticastTtlOption2Attribuez à ce paramètre une valeur entière pour définir l'option de socket IP_MULTICAST_TTL (TTL pour les datagrammes multicast).
QAbstractSocket::MulticastLoopbackOption3Mettez cette valeur à 1 pour activer l'option de socket IP_MULTICAST_LOOP (bouclage multicast).
QAbstractSocket::TypeOfServiceOption4Cette option n'est pas prise en charge sous Windows. Cette option correspond à l'option de socket IP_TOS. Pour les valeurs possibles, voir 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. Cette option correspond à l'option de socket SO_SNDBUF. Cette option n'affecte pas les tampons QIODevice ou QAbstractSocket. Cette valeur 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 a été introduite dans Qt 5.3.
QAbstractSocket::PathMtuSocketOption7Récupère la valeur du PMTU (Path Maximum Transmission Unit) actuellement connue par la pile IP, s'il y en a une. Certaines piles IP permettent également de définir le MTU pour la transmission. Cette valeur a été introduite dans Qt 5.11.
QAbstractSocket::KeepAliveIdleOption8Le temps en secondes que la connexion doit rester inactive avant que TCP ne commence à envoyer des sondes keepalive si l'option KeepAliveOption est activée. Cette valeur a été introduite dans Qt 6.11.
QAbstractSocket::KeepAliveIntervalOption9Le temps en secondes entre les sondes keepalive individuelles, si l'option KeepAliveOption est activée. Cette option n'est pas supportée par tous les systèmes d'exploitation. Cette valeur a été introduite dans Qt 6.11.
QAbstractSocket::KeepAliveCountOption10Le nombre maximum de sondes keepalive à envoyer avant que TCP n'abandonne la connexion, si l'option KeepAliveOption est activée. Cette option n'est pas supportée par tous les systèmes d'exploitation. Cette valeur a été introduite dans Qt 6.11.

Les valeurs possibles pour TypeOfServiceOption sont les suivantes :

ValeurValeur Description
224Contrôle du réseau
192Contrôle du réseau Internet
160CRITIC/ECP
128Flash override
96Flash
64Immédiate
32Priorité
0Routine

Voir aussi QAbstractSocket::setSocketOption() et QAbstractSocket::socketOption().

enum QAbstractSocket::SocketState

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

ConstanteValeurDescription de l'état
QAbstractSocket::UnconnectedState0La socket n'est pas connectée.
QAbstractSocket::HostLookupState1La socket est en train d'effectuer une recherche de nom d'hôte.
QAbstractSocket::ConnectingState2La socket a commencé à établir une connexion.
QAbstractSocket::ConnectedState3Une connexion est établie.
QAbstractSocket::BoundState4La socket est liée à une adresse et à un port.
QAbstractSocket::ClosingState6La socket est sur le point de se fermer (des données peuvent encore attendre d'être écrites).
QAbstractSocket::ListeningState5Réservé à un usage interne.

Voir également QAbstractSocket::state().

enum QAbstractSocket::SocketType

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

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

Voir aussi QAbstractSocket::socketType().

Documentation des fonctions membres

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

Crée une nouvelle socket abstraite de type socketType. L'argument parent est transmis au constructeur de QObject.

Voir aussi socketType(), QTcpSocket, et QUdpSocket.

[virtual noexcept] QAbstractSocket::~QAbstractSocket()

Détruit la prise.

void QAbstractSocket::abort()

Abandonne la connexion en cours et réinitialise le socket. Contrairement à disconnectFromHost(), cette fonction ferme immédiatement la socket, en rejetant 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)

Se lie à address sur le port port, en utilisant le serveur BindMode mode .

Pour les sockets UDP, après la liaison, le signal QUdpSocket::readyRead() est émis chaque fois qu'un datagramme UDP arrive sur l'adresse et le 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 d'interfaces réseau multiples.

Par défaut, la socket est liée à l'aide de 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 la socket entre dans BoundState; sinon, elle renvoie false.

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

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

Par défaut, la socket est liée à 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 l'adresse 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.

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 aussi bytesToWrite() et read().

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

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

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

Voir aussi bytesAvailable() et flush().

[override virtual] void QAbstractSocket::close()

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

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

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

Voir aussi abort().

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

Tente d'établir une connexion avec hostName sur le site port. Le paramètre protocol peut être utilisé pour spécifier le protocole réseau à utiliser (par exemple, IPv4 ou IPv6).

La socket est ouverte dans l'adresse openMode et entre d'abord dans HostLookupState, puis effectue une recherche de nom d'hôte dans hostName. Si la recherche aboutit, hostFound() est émis et QAbstractSocket entre dans ConnectingState. Il tente ensuite de se connecter à l'adresse ou aux adresses renvoyées par la recherche. Enfin, si une connexion est établie, QAbstractSocket entre dans ConnectedState et émet connected().

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

hostName peut être une adresse IP sous forme de chaîne (par exemple, "43.195.83.32") ou un nom d'hôte (par exemple, "example.com"). QAbstractSocket n'effectuera une recherche que si cela est nécessaire. port est dans l'ordre natif des octets.

Voir aussi state(), peerName(), peerAddress(), peerPort() et waitForConnected().

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

Tente d'établir une connexion avec address sur le port port.

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

[signal] void QAbstractSocket::connected()

Ce signal est émis après que connectToHost() a été appelé et qu'une connexion a été é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 à l'hôte local.

Voir également connectToHost() et disconnected().

[virtual] void QAbstractSocket::disconnectFromHost()

Tente de fermer la socket. S'il y a des données en attente d'écriture, QAbstractSocket entrera dans ClosingState et attendra jusqu'à ce que toutes les données aient été écrites. Finalement, il entrera dans UnconnectedState et émettra le signal disconnected().

Voir aussi connectToHost().

[signal] void QAbstractSocket::disconnected()

Ce signal est émis lorsque la prise a été déconnectée.

Attention : Si vous devez supprimer le sender() de ce signal dans un slot qui lui est connecté, utilisez la fonction deleteLater().

Voir aussi connectToHost(), disconnectFromHost(), et abort().

QAbstractSocket::SocketError QAbstractSocket::error() const

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

Voir aussi 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 qui s'est produite.

Lorsque ce signal est émis, il se peut que la socket ne soit pas prête 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 0ns comme timeout.

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

Voir aussi error(), errorString(), et Créer des types Qt personnalisés.

bool QAbstractSocket::flush()

Cette fonction écrit autant de données que possible depuis le tampon d'écriture interne vers le socket réseau sous-jacent, sans bloquer. Si des données ont été écrites, cette fonction renvoie true; sinon, elle renvoie false.

Appelez cette fonction si vous avez besoin que QAbstractSocket commence à envoyer des données tamponnées immédiatement. Le nombre d'octets écrits avec succès dépend du système d'exploitation. Dans la plupart des cas, il n'est pas nécessaire d'appeler cette fonction, car QAbstractSocket commencera à envoyer des données automatiquement 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 que connectToHost() a été appelé et que la recherche d'hôte a réussi.

Note : Depuis Qt 4.6.3 QAbstractSocket peut émettre hostFound() directement à partir de l'appel de connectToHost() puisqu'un résultat DNS peut avoir été mis en cache.

Voir aussi connected().

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

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

bool QAbstractSocket::isValid() const

Renvoie true si la socket est valide et prête à être utilisée, sinon renvoie false.

Note : L'état de la socket doit être ConnectedState avant que la lecture et l'écriture puissent avoir lieu.

Voir aussi state().

QHostAddress QAbstractSocket::localAddress() const

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

Il s'agit normalement 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 aussi localPort(), peerAddress(), et setLocalAddress().

quint16 QAbstractSocket::localPort() const

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

Voir aussi localAddress(), peerPort(), et setLocalPort().

QAbstractSocket::PauseModes QAbstractSocket::pauseMode() const

Renvoie le mode de pause de cette socket.

Voir aussi setPauseMode() et resume().

QHostAddress QAbstractSocket::peerAddress() const

Renvoie l'adresse de l'homologue connecté si la socket est dans ConnectedState; sinon, renvoie QHostAddress::Null.

Voir aussi peerName(), peerPort(), localAddress(), et setPeerAddress().

QString QAbstractSocket::peerName() const

Renvoie le nom de l'homologue tel que spécifié par connectToHost(), ou un QString vide si connectToHost() n'a pas été appelé.

Voir aussi peerAddress(), peerPort(), et setPeerName().

quint16 QAbstractSocket::peerPort() const

Renvoie le port de l'homologue connecté si la socket est dans ConnectedState; sinon renvoie 0.

Voir aussi peerAddress(), localPort(), et setPeerPort().

QString QAbstractSocket::protocolTag() const

Renvoie la balise de protocole pour cette socket. Si la balise de protocole est définie, elle est transmise à QNetworkProxyQuery lors de sa création interne pour indiquer la balise de protocole à utiliser.

Voir aussi setProtocolTag() et QNetworkProxyQuery.

QNetworkProxy QAbstractSocket::proxy() const

Renvoie le proxy réseau pour 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 aussi setProxy(), QNetworkProxy, et QNetworkProxyFactory.

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

Ce signal peut être émis lors de l'utilisation d'un site proxy nécessitant une authentification. L'objet authenticator peut alors être rempli avec les détails requis pour permettre l'authentification et poursuivre la connexion.

Remarque : il n'est pas possible d'utiliser une QueuedConnection pour se connecter à ce signal, car la connexion échouera si l'authentificateur n'a pas été complété avec de nouvelles informations lorsque le signal est renvoyé.

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 de 0 (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émente : QIODevice::readData(char *data, qint64 maxSize).

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

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

[virtual] void QAbstractSocket::resume()

Poursuit le transfert de données sur la socket. Cette méthode ne doit être utilisée qu'après que la socket a été configurée pour faire une pause en cas de notification et qu'une notification a été reçue. La seule notification actuellement supportée est QSslSocket::sslErrors(). L'appel de cette méthode si la socket n'est pas en pause entraîne un comportement indéfini.

Voir aussi pauseMode() et setPauseMode().

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

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

Vous pouvez appeler cette fonction dans une sous-classe de QAbstractSocket pour modifier la valeur de retour de la fonction localAddress() après l'établissement d'une connexion. Cette fonction est couramment utilisée par les connexions proxy pour les paramètres de connexion virtuelle.

Notez que cette fonction ne lie pas l'adresse locale de la socket avant une connexion (par exemple, QAbstractSocket::bind()).

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

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

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

Vous pouvez appeler cette fonction dans une sous-classe de QAbstractSocket pour modifier la valeur de retour de la fonction localPort() après l'établissement d'une connexion. Cette fonction 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 de la socket avant une connexion (par exemple, QAbstractSocket::bind()).

Voir aussi localPort(), localAddress(), setLocalAddress() et setPeerPort().

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

Détermine s'il convient de faire une pause lors de la réception d'une notification. Le paramètre pauseMode spécifie les conditions dans lesquelles la socket doit être mise en pause. La seule notification actuellement supportée est QSslSocket::sslErrors(). Si cette option vaut PauseOnSslErrors, le transfert de données sur la socket sera interrompu 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 la connexion au serveur, sinon elle 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 à address.

Vous pouvez appeler cette fonction dans une sous-classe de QAbstractSocket pour modifier la valeur de retour de la fonction peerAddress() après l'établissement d'une connexion. Cette fonction 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 de l'homologue distant à name.

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

Voir aussi peerName().

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

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

Vous pouvez appeler cette fonction dans une sous-classe de QAbstractSocket pour modifier la valeur de retour de la fonction peerPort() après l'établissement d'une connexion. Cette fonction 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 la balise de protocole pour cette socket à tag.

Voir aussi protocolTag().

void QAbstractSocket::setProxy(const QNetworkProxy &networkProxy)

Définit le proxy réseau explicite pour cette socket à networkProxy.

Pour désactiver l'utilisation d'un proxy pour cette 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 la socket utilisera les paramètres de l'application : si un proxy est défini avec QNetworkProxy::setApplicationProxy, elle l'utilisera ; sinon, si une usine est définie avec QNetworkProxyFactory::setApplicationProxyFactory, elle interrogera cette usine avec le type QNetworkProxyQuery::TcpSocket.

Voir aussi proxy(), QNetworkProxy, et QNetworkProxyFactory::queryProxy().

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

Fixe la taille du tampon de lecture interne de QAbstractSocket à size octets.

Si la taille du tampon est limitée à une certaine taille, QAbstractSocket ne mettra pas en mémoire tampon plus que cette taille de données. Exceptionnellement, une taille de tampon de 0 signifie que le tampon de lecture est illimité et que toutes les données entrantes sont mises en mémoire tampon. Il s'agit de 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 voulez protéger votre socket contre la réception d'une trop grande quantité de données, ce qui pourrait éventuellement entraîner une saturation de la mémoire de votre application.

Seul QTcpSocket utilise la mémoire tampon interne de QAbstractSocket; QUdpSocket n'utilise aucune mémoire tampon, mais s'appuie plutôt sur la mémoire tampon implicite fournie par le système d'exploitation. Pour cette raison, appeler cette fonction sur QUdpSocket n'a aucun effet.

Voir aussi 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 accepté comme descripteur de socket valide ; sinon, renvoie false. La socket est ouverte dans le mode spécifié par openMode, et entre dans l'état de la socket spécifié par socketState. Les tampons de lecture et d'écriture sont vidés et les données en attente sont rejetées.

Note : Il n'est pas possible d'initialiser deux sockets abstraites avec le même descripteur de socket natif.

Voir aussi socketDescriptor().

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

Définit le type d'erreur qui s'est produit en dernier à socketError.

Voir aussi setSocketState() et setErrorString().

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

Fixe la valeur donnée par option à la valeur décrite par value.

Note : Comme les options sont définies sur une socket interne, elles ne s'appliquent que si la socket a été créée. Cela n'est garanti qu'après un appel à bind(), ou lorsque connected() a été émis.

Voir aussi socketOption().

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

Définit l'état de la socket à 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 la socket utilise QNetworkProxy, le descripteur retourné peut ne pas être utilisable avec les fonctions natives de la socket.

Le descripteur de socket n'est pas disponible lorsque QAbstractSocket est dans 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 aussi QTcpSocket et QUdpSocket.

QAbstractSocket::SocketState QAbstractSocket::state() const

Renvoie l'état de la socket.

Voir aussi error().

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

Ce signal est émis lorsque l'état de QAbstractSocket change. Le paramètre socketState est le nouvel état.

QAbstractSocket::SocketState n'est pas un métatype enregistré, donc pour les connexions en file d'attente, vous devrez l'enregistrer avec Q_DECLARE_METATYPE() et qRegisterMetaType().

Voir aussi state() et Créer des types Qt personnalisés.

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

Réimplémente : QIODevice::waitForBytesWritten(int msecs).

Cette fonction se bloque jusqu'à ce qu'au moins un octet ait été écrit sur la socket et que le signal bytesWritten() ait été émis. La fonction s'arrête après msecs millisecondes ; le délai par défaut est de 30000 millisecondes.

La fonction renvoie true si le signal bytesWritten() est émis ; 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 bytesWritten() si votre logiciel doit fonctionner sous Windows.

Voir également waitForReadyRead().

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

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

L'exemple suivant attend jusqu'à une seconde l'établissement d'une connexion :

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

Si msecs est égal à -1, cette fonction n'est pas interrompue.

Note : Cette fonction peut attendre un peu plus longtemps que msecs, en fonction du temps nécessaire pour terminer la recherche d'hôte.

Remarque : les appels multiples à cette fonction n'accumulent pas le temps. En cas de dépassement du délai de la fonction, le processus de connexion est 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 doit fonctionner sous Windows.

Voir également connectToHost() et connected().

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

Attend que la socket soit déconnectée, jusqu'à msecs millisecondes. Si la connexion a été déconnectée avec succès, cette fonction renvoie true; sinon, elle renvoie false (si l'opération a pris du retard, si une erreur s'est produite ou si cette QAbstractSocket est déjà déconnectée). Dans le cas où elle renvoie false, vous pouvez appeler error() pour déterminer la cause de l'erreur.

L'exemple suivant attend jusqu'à une seconde la fermeture d'une connexion :

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

Si msecs est égal à -1, cette fonction n'est pas interrompue.

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 doit fonctionner sous Windows.

Voir également disconnectFromHost() et close().

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

Réimplémente : QIODevice::waitForReadyRead(int msecs).

Cette fonction se bloque jusqu'à ce que de nouvelles données soient disponibles pour la lecture et que le signal readyRead() ait été émis. La fonction s'arrête au bout de msecs millisecondes ; le délai par défaut est de 30000 millisecondes.

La fonction renvoie true si le signal readyRead() a été é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 été interrompue).

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 aussi waitForBytesWritten().

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

Réimplémente : 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.