QSctpSocket Class
La classe QSctpSocket fournit une socket SCTP. Plus d'informations...
| En-tête : | #include <QSctpSocket> |
| CMake : | find_package(Qt6 REQUIRED COMPONENTS Network)target_link_libraries(mytarget PRIVATE Qt6::Network) |
| qmake : | QT += network |
| Héritages : | QTcpSocket |
- Liste de tous les membres, y compris les membres hérités
- QSctpSocket fait partie de l'API de programmation réseau.
Fonctions publiques
| QSctpSocket(QObject *parent = nullptr) | |
| virtual | ~QSctpSocket() |
| bool | isInDatagramMode() const |
| int | maximumChannelCount() const |
| QNetworkDatagram | readDatagram() |
| void | setMaximumChannelCount(int count) |
| bool | writeDatagram(const QNetworkDatagram &datagram) |
Fonctions publiques réimplémentées
| virtual void | close() override |
| virtual void | disconnectFromHost() override |
Fonctions protégées réimplémentées
| virtual qint64 | readData(char *data, qint64 maxSize) override |
| virtual qint64 | readLineData(char *data, qint64 maxlen) override |
Description détaillée
SCTP (Stream Control Transmission Protocol) est un protocole de couche de transport jouant un rôle similaire à celui des protocoles populaires TCP et UDP. Comme UDP, SCTP est orienté message, mais il assure un transport fiable et séquentiel des messages avec un contrôle de congestion comme TCP.
Le SCTP est un protocole orienté connexion, qui permet la transmission simultanée et complète de plusieurs flux de données entre les points d'extrémité. Ce multi-flux permet aux données d'être livrées par des canaux indépendants, de sorte qu'en cas de perte de données dans un flux, la livraison ne sera pas affectée pour les autres flux.
Le SCTP étant axé sur les messages, il transporte une séquence de messages plutôt qu'un flux ininterrompu d'octets comme le fait le TCP. Comme pour l'UDP, dans le SCTP, un expéditeur envoie un message en une seule opération, et ce message exact est transmis au processus de l'application réceptrice en une seule opération. Mais contrairement à l'UDP, la livraison est garantie.
Il prend également en charge le multi-homing, ce qui signifie qu'un point d'extrémité connecté peut être associé à d'autres adresses IP afin de contourner les défaillances du réseau ou les conditions changeantes.
QSctpSocket est une sous-classe de commodité de QTcpSocket qui vous permet d'émuler un flux de données TCP sur SCTP ou d'établir une connexion SCTP pour un service de datagramme fiable.
QSctpSocket peut fonctionner dans l'un des deux modes possibles :
- Flux continu d'octets (émulation TCP).
- Mode datagramme à flux multiples.
Pour définir un mode de flux continu d'octets, instanciez QSctpSocket et appelez setMaximumChannelCount() avec une valeur négative. Cela permet d'utiliser QSctpSocket comme un tampon ordinaire QTcpSocket. Vous pouvez appeler connectToHost() pour établir la connexion avec le point d'extrémité, write() pour transmettre et read() pour recevoir des données de l'homologue, mais vous ne pouvez pas distinguer les limites des messages.
Par défaut, QSctpSocket fonctionne en mode datagramme. Avant de vous connecter, appelez setMaximumChannelCount() pour définir le nombre maximal de canaux que l'application est prête à prendre en charge. Ce nombre est un paramètre négocié avec le point d'accès distant et sa valeur peut être limitée par le système d'exploitation. La valeur par défaut de 0 indique qu'il faut utiliser la valeur de l'homologue. Si les deux points d'extrémité ont des valeurs par défaut, le nombre de canaux de connexion dépend du système. Après avoir établi une connexion, vous pouvez obtenir le nombre réel de canaux en appelant readChannelCount() et writeChannelCount().
QSctpSocket *socket = new QSctpSocket(this); socket->setMaxChannelCount(16); socket->connectToHost(QHostAddress::LocalHost, 1973); if (socket->waitForConnected(1000)) { int inputChannels = socket->readChannelCount(); int outputChannels = socket->writeChannelCount(); .... }
En mode datagramme, QSctpSocket effectue la mise en mémoire tampon des datagrammes indépendamment pour chaque canal. Vous pouvez mettre un datagramme en file d'attente dans le tampon du canal actuel en appelant writeDatagram() et lire un datagramme en attente en appelant readDatagram() respectivement.
L'utilisation des fonctions standard QIODevice read (), readLine(), write(), etc. est autorisée en mode datagramme avec les mêmes limitations qu'en mode flux continu d'octets.
Remarque : cette classe n'est pas prise en charge sur la plate-forme Windows.
Voir également QSctpServer, QTcpSocket, et QAbstractSocket.
Documentation des fonctions membres
[explicit] QSctpSocket::QSctpSocket(QObject *parent = nullptr)
Crée un objet QSctpSocket dans l'état UnconnectedState.
Définit le mode de fonctionnement du datagramme. L'argument parent est transmis au constructeur de QObject.
Voir aussi socketType() et setMaximumChannelCount().
[virtual noexcept] QSctpSocket::~QSctpSocket()
Détruit le socket, en fermant la connexion si nécessaire.
Voir aussi close().
[override virtual] void QSctpSocket::close()
Réimplémente : QAbstractSocket::close().
[override virtual] void QSctpSocket::disconnectFromHost()
Réimplémente : QAbstractSocket::disconnectFromHost().
bool QSctpSocket::isInDatagramMode() const
Retourne true si la socket fonctionne en mode datagramme.
Voir aussi setMaximumChannelCount().
int QSctpSocket::maximumChannelCount() const
Renvoie le nombre maximum de canaux que QSctpSocket peut prendre en charge.
Une valeur de 0 (par défaut) signifie que le nombre de canaux de connexion est défini par le point de terminaison distant.
Retourne -1 si QSctpSocket fonctionne en mode flux continu d'octets.
Voir aussi setMaximumChannelCount(), readChannelCount(), et writeChannelCount().
[override virtual protected] qint64 QSctpSocket::readData(char *data, qint64 maxSize)
Réimplémente : QAbstractSocket::readData(char *data, qint64 maxSize).
QNetworkDatagram QSctpSocket::readDatagram()
Lit un datagramme dans la mémoire tampon du canal de lecture actuel et le renvoie sous la forme d'un objet QNetworkDatagram, avec l'adresse de l'hôte et le port de l'expéditeur. Si possible, cette fonction tente également de déterminer l'adresse et le port de destination du datagramme, ainsi que le nombre de sauts au moment de la réception.
En cas d'échec, elle renvoie une adresse QNetworkDatagram qui signale not valid.
Voir aussi writeDatagram(), isInDatagramMode() et currentReadChannel().
[override virtual protected] qint64 QSctpSocket::readLineData(char *data, qint64 maxlen)
Réimplémente : QAbstractSocket::readLineData(char *data, qint64 maxlen).
void QSctpSocket::setMaximumChannelCount(int count)
Définit le nombre maximal de canaux que l'application est prête à prendre en charge en mode datagramme, à count. Si count est égal à 0, la valeur du point final pour le nombre maximal de canaux est utilisée. La valeur négative de count définit un mode de flux d'octets continu.
Cette méthode ne peut être appelée que si QSctpSocket est dans l'état "UnconnectedState".
Voir également maximumChannelCount(), readChannelCount() et writeChannelCount().
bool QSctpSocket::writeDatagram(const QNetworkDatagram &datagram)
Écrit un datagram dans le tampon du canal d'écriture actuel. Retourne true en cas de succès, sinon retourne false.
Voir aussi readDatagram(), isInDatagramMode() et currentWriteChannel().
© 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.