QSctpSocket Class
La classe QSctpSocket fournit un socket SCTP. En savoir plus...
| En-tête : | #include <QSctpSocket> |
| CMake : | find_package(Qt6 REQUIRED COMPONENTS Network) target_link_libraries(mytarget PRIVATE Qt6::Network) |
| qmake : | QT += network |
| Hérite de : | 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
Le protocole SCTP (Stream Control Transmission Protocol) est un protocole de la couche de transport qui remplit un rôle similaire à celui des protocoles courants TCP et UDP. À l'instar du protocole UDP, le protocole SCTP est orienté messages, mais il garantit un transport fiable et séquentiel des messages grâce à un contrôle de congestion similaire à celui du protocole TCP.
Le SCTP est un protocole orienté connexion qui permet la transmission simultanée et complète de plusieurs flux de données entre des points d’extrémité. Ce multi-streaming permet aux données d’être acheminées par des canaux indépendants, de sorte que si une perte de données survient dans un flux, la transmission des autres flux n’en est pas affectée.
Étant orienté message, le SCTP transporte une séquence de messages, plutôt qu’un flux ininterrompu d’octets comme le fait le TCP. À l’instar de l’UDP, dans le SCTP, un expéditeur envoie un message en une seule opération, et ce message précis est transmis au processus d’application récepteur 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é à plusieurs adresses IP afin de contourner une défaillance du réseau ou de s’adapter à des conditions changeantes.
QSctpSocket est une sous-classe pratique d’ QTcpSocket qui vous permet d’émuler un flux de données TCP sur SCTP ou d’établir une connexion SCTP pour un service de datagrammes fiable.
QSctpSocket peut fonctionner selon l’un des deux modes suivants :
- Flux d’octets continu (émulation TCP).
- Mode datagramme multi-flux.
Pour activer le mode de flux d’octets continu, instanciez QSctpSocket et appelez la méthode setMaximumChannelCount() avec une valeur négative. Cela permet d’utiliser QSctpSocket comme un « QTcpSocket » standard avec tampon. Vous pouvez appeler connectToHost() pour établir une connexion avec un point de terminaison, write() pour transmettre et read() pour recevoir des données du pair, mais vous ne pouvez pas distinguer les limites entre les messages.
Par défaut, QSctpSocket fonctionne en mode datagramme. Avant de vous connecter, appelez la fonction ` 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 de terminaison distant et sa valeur peut être limitée par le système d’exploitation. La valeur par défaut, 0, indique d’utiliser la valeur du pair. Si les deux points d’extrémité ont des valeurs par défaut, le nombre de canaux de connexion dépend alors du système. Une fois la connexion établie, vous pouvez récupérer 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 gère la mise en mémoire tampon des datagrammes indépendamment pour chaque canal. Vous pouvez mettre un datagramme en file d’attente dans la mémoire tampon du canal actuel en appelant writeDatagram() et lire un datagramme en attente en appelant readDatagram(), respectivement.
L'utilisation des fonctions standard d'QIODevice, telles que read(), readLine(), write(), etc., est autorisée en mode datagramme avec les mêmes restrictions qu'en mode flux d'octets continu.
Remarque : cette classe n’est pas prise en charge sur la plateforme 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 en datagrammes. L'argument ` parent ` est transmis au constructeur de ` QObject`.
Voir également socketType() et setMaximumChannelCount().
[virtual noexcept] QSctpSocket::~QSctpSocket()
Détruit le socket et ferme 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
Renvoie « true » si le socket fonctionne en mode datagramme.
Voir également setMaximumChannelCount().
int QSctpSocket::maximumChannelCount() const
Renvoie le nombre maximal de canaux pris en charge par QSctpSocket.
Une valeur de 0 (par défaut) signifie que le nombre de canaux de connexion sera défini par le point de terminaison distant.
Renvoie -1 si QSctpSocket s'exécute en mode flux d'octets continu.
Voir également setMaximumChannelCount(), readChannelCount() et writeChannelCount().
[override virtual protected] qint64 QSctpSocket::readData(char *data, qint64 maxSize)
Réimplémentation de : QAbstractSocket::readData(char *data, qint64 maxSize).
QNetworkDatagram QSctpSocket::readDatagram()
Lit un datagramme à partir du tampon du canal de lecture actuel et le renvoie sous la forme d'un objet ` QNetworkDatagram `, accompagné de l'adresse hôte et du port de l'expéditeur. Si possible, cette fonction tentera également de déterminer l'adresse de destination du datagramme, son port et le nombre de sauts au moment de la réception.
En cas d’échec, renvoie un objet ` QNetworkDatagram ` signalant l’erreur ` not valid`.
Voir également writeDatagram(), isInDatagramMode() et currentReadChannel().
[override virtual protected] qint64 QSctpSocket::readLineData(char *data, qint64 maxlen)
Réimplémentation de : 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, à la valeur count. Si count est égal à 0, la valeur du nombre maximal de canaux définie par le point de terminaison est utilisée. Une valeur négative de count active le mode flux continu d'octets.
N’appelez cette méthode que lorsque QSctpSocket est à l’état UnconnectedState.
Voir également maximumChannelCount(), readChannelCount() et writeChannelCount().
bool QSctpSocket::writeDatagram(const QNetworkDatagram &datagram)
Écrit un document « datagram » dans le tampon du canal d'écriture actuel. Renvoie « true » en cas de succès ; sinon, renvoie « false ».
Voir également 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.