QSctpSocket Class
Die Klasse „QSctpSocket“ stellt einen SCTP-Socket bereit. Mehr...
| Header: | #include <QSctpSocket> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Network) target_link_libraries(mytarget PRIVATE Qt6::Network) |
| qmake: | QT += network |
| Erbt von: | QTcpSocket |
- Liste aller Mitglieder, einschließlich geerbter Mitglieder
- QSctpSocket ist Teil der Netzwerkprogrammierungs-API.
Öffentliche Funktionen
| QSctpSocket(QObject *parent = nullptr) | |
| virtual | ~QSctpSocket() |
| bool | isInDatagramMode() const |
| int | maximumChannelCount() const |
| QNetworkDatagram | readDatagram() |
| void | setMaximumChannelCount(int count) |
| bool | writeDatagram(const QNetworkDatagram &datagram) |
Neu implementierte öffentliche Funktionen
| virtual void | close() override |
| virtual void | disconnectFromHost() override |
Neu implementierte geschützte Funktionen
| virtual qint64 | readData(char *data, qint64 maxSize) override |
| virtual qint64 | readLineData(char *data, qint64 maxlen) override |
Ausführliche Beschreibung
SCTP (Stream Control Transmission Protocol) ist ein Protokoll der Transportschicht, das eine ähnliche Rolle wie die gängigen Protokolle TCP und UDP erfüllt. Wie UDP ist SCTP nachrichtenorientiert, gewährleistet jedoch wie TCP einen zuverlässigen, sequenzierten Transport von Nachrichten mit Überlastungskontrolle.
SCTP ist ein verbindungsorientiertes Protokoll, das die vollständige gleichzeitige Übertragung mehrerer Datenströme zwischen Endpunkten ermöglicht. Dieses Multi-Streaming ermöglicht die Übertragung von Daten über unabhängige Kanäle, sodass bei einem Datenverlust in einem Strom die Übertragung der anderen Ströme nicht beeinträchtigt wird.
Da SCTP nachrichtenorientiert ist, transportiert es eine Abfolge von Nachrichten und nicht, wie TCP, einen ununterbrochenen Byte-Strom. Wie bei UDP sendet ein Absender bei SCTP eine Nachricht in einem Vorgang, und genau diese Nachricht wird in einem Vorgang an den empfangenden Anwendungsprozess weitergeleitet. Im Gegensatz zu UDP ist die Zustellung jedoch garantiert.
Außerdem unterstützt es Multi-Homing, was bedeutet, dass einem verbundenen Endpunkt alternative IP-Adressen zugeordnet werden können, um Netzwerkausfälle oder sich ändernde Bedingungen zu umgehen.
`QSctpSocket` ist eine Komfort-Unterklasse von ` QTcpSocket `, mit der Sie einen TCP-Datenstrom über SCTP emulieren oder eine SCTP-Verbindung für einen zuverlässigen Datagrammdienst herstellen können.
QSctpSocket kann in einem von zwei möglichen Modi betrieben werden:
- Kontinuierlicher Byte-Stream (TCP-Emulation).
- Modus mit mehreren Datagramm-Strömen.
Um den Modus für einen kontinuierlichen Byte-Stream festzulegen, instanziieren Sie QSctpSocket und rufen Sie setMaximumChannelCount() mit einem negativen Wert auf. Dadurch lässt sich QSctpSocket wie ein gewöhnlicher gepufferter „ QTcpSocket “ verwenden. Sie können ` connectToHost()` aufrufen, um eine Verbindung mit einem Endpunkt herzustellen, ` write()` zum Senden und ` read()` zum Empfangen von Daten vom Gegenüber, können jedoch keine Nachrichtengrenzen unterscheiden.
Standardmäßig arbeitet `QSctpSocket` im Datagramm-Modus. Rufen Sie vor dem Verbindungsaufbau ` setMaximumChannelCount()` auf, um die maximale Anzahl an Kanälen festzulegen, die die Anwendung unterstützen kann. Diese Zahl ist ein mit dem entfernten Endpunkt ausgehandelter Parameter, dessen Wert durch das Betriebssystem begrenzt sein kann. Der Standardwert 0 bedeutet, dass der Wert des Gegenübers verwendet wird. Wenn beide Endpunkte Standardwerte haben, ist die Anzahl der Verbindungskanäle systemabhängig. Nach dem Aufbau einer Verbindung können Sie die tatsächliche Anzahl der Kanäle abrufen, indem Sie „ readChannelCount()“ und „ writeChannelCount()“ aufrufen.
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();
....
}Im Datagramm-Modus führt QSctpSocket die Pufferung von Datagrammen für jeden Kanal unabhängig durch. Sie können ein Datagramm in den Puffer des aktuellen Kanals einreihen, indem Sie writeDatagram() aufrufen, und ein ausstehendes Datagramm lesen, indem Sie readDatagram() aufrufen.
Die Verwendung der Standardfunktionen von QIODevice wie read(), readLine(), write() usw. ist im Datagramm-Modus mit denselben Einschränkungen wie im Modus für kontinuierliche Byte-Ströme zulässig.
Hinweis: Diese Klasse wird auf der Windows-Plattform nicht unterstützt.
Siehe auch QSctpServer, QTcpSocket und QAbstractSocket.
Dokumentation zu den Mitgliedsfunktionen
[explicit] QSctpSocket::QSctpSocket(QObject *parent = nullptr)
Erstellt ein QSctpSocket-Objekt im Zustand „ UnconnectedState “.
Legt den Datagramm-Betriebsmodus fest. Das Argument ` parent ` wird an den Konstruktor von ` QObject` übergeben.
Siehe auch ` socketType()` und ` setMaximumChannelCount()`.
[virtual noexcept] QSctpSocket::~QSctpSocket()
Löscht den Socket und schließt gegebenenfalls die Verbindung.
Siehe auch ` close()`.
[override virtual] void QSctpSocket::close()
Implementiert: QAbstractSocket::close().
[override virtual] void QSctpSocket::disconnectFromHost()
Implementiert: QAbstractSocket::disconnectFromHost().
bool QSctpSocket::isInDatagramMode() const
Gibt „ true “ zurück, wenn der Socket im Datagramm-Modus läuft.
Siehe auch setMaximumChannelCount().
int QSctpSocket::maximumChannelCount() const
Gibt die maximale Anzahl an Kanälen zurück, die „ QSctpSocket “ unterstützen kann.
Der Wert 0 (Standard) bedeutet, dass die Anzahl der Verbindungskanäle vom Remote-Endpunkt festgelegt wird.
Gibt -1 zurück, wenn „ QSctpSocket “ im Modus für kontinuierliche Byte-Ströme ausgeführt wird.
Siehe auch „ setMaximumChannelCount()“, „ readChannelCount()“ und „ writeChannelCount()“.
[override virtual protected] qint64 QSctpSocket::readData(char *data, qint64 maxSize)
Implementiert neu: QAbstractSocket::readData(char *data, qint64 maxSize).
QNetworkDatagram QSctpSocket::readDatagram()
Liest ein Datagramm aus dem Puffer des aktuellen Lesekanals und gibt es als ` QNetworkDatagram `-Objekt zurück, zusammen mit der Host-Adresse und dem Port des Absenders. Wenn möglich, versucht diese Funktion außerdem, die Zieladresse, den Port und die Anzahl der Hops des Datagramms zum Zeitpunkt des Empfangs zu ermitteln.
Im Fehlerfall wird ein ` QNetworkDatagram ` zurückgegeben, das den Fehler „ not valid “ meldet.
Siehe auch ` writeDatagram()`, ` isInDatagramMode()` und ` currentReadChannel()`.
[override virtual protected] qint64 QSctpSocket::readLineData(char *data, qint64 maxlen)
Implementiert: QAbstractSocket::readLineData(char *data, qint64 maxlen).
void QSctpSocket::setMaximumChannelCount(int count)
Legt die maximale Anzahl von Kanälen fest, die die Anwendung im Datagramm-Modus unterstützen kann, und zwar auf „ count “. Ist „ count “ gleich 0, wird der Wert des Endpunkts für die maximale Anzahl von Kanälen verwendet. Ein negativer Wert für „ count “ legt einen kontinuierlichen Byte-Stream-Modus fest.
QSctpSocket Rufen Sie diese Methode nur auf, wenn sich der Endpunkt im „UnconnectedState“ befindet.
Siehe auch maximumChannelCount(), readChannelCount() und writeChannelCount().
bool QSctpSocket::writeDatagram(const QNetworkDatagram &datagram)
Schreibt ein ` datagram ` in den Puffer des aktuellen Schreibkanals. Gibt bei Erfolg „true“ zurück, andernfalls „false“.
Siehe auch „ readDatagram()“, „ isInDatagramMode()“ und „ 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.