QSctpSocket Class

Die Klasse QSctpSocket stellt einen SCTP-Socket zur Verfügung. Mehr...

Header: #include <QSctpSocket>
CMake: find_package(Qt6 REQUIRED COMPONENTS Network)
target_link_libraries(mytarget PRIVATE Qt6::Network)
qmake: QT += network
Vererbt: QTcpSocket

Ö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)

Reimplementierte öffentliche Funktionen

virtual void close() override
virtual void disconnectFromHost() override

Reimplementierte geschützte Funktionen

virtual qint64 readData(char *data, qint64 maxSize) override
virtual qint64 readLineData(char *data, qint64 maxlen) override

Detaillierte Beschreibung

SCTP (Stream Control Transmission Protocol) ist ein Protokoll der Transportschicht, das eine ähnliche Rolle wie die populären Protokolle TCP und UDP spielt. Wie UDP ist SCTP nachrichtenorientiert, aber es gewährleistet einen zuverlässigen, sequenziellen Transport von Nachrichten mit Staukontrolle wie TCP.

SCTP ist ein verbindungsorientiertes Protokoll, das die vollständige gleichzeitige Übertragung mehrerer Datenströme zwischen Endpunkten ermöglicht. Durch dieses Multi-Streaming können die Daten über unabhängige Kanäle übertragen werden, so dass bei einem Datenverlust in einem Datenstrom die Übertragung der anderen Datenströme nicht beeinträchtigt wird.

Da SCTP nachrichtenorientiert ist, transportiert es eine Folge von Nachrichten und nicht wie TCP einen ununterbrochenen Strom von Bytes. 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.

SCTP unterstützt außerdem Multi-Homing, d. h., einem angeschlossenen Endpunkt können alternative IP-Adressen zugeordnet werden, um Netzwerkausfälle oder veränderte Bedingungen zu umgehen.

QSctpSocket ist eine komfortable Unterklasse von QTcpSocket, die es Ihnen ermöglicht, einen TCP-Datenstrom über SCTP zu emulieren oder eine SCTP-Verbindung für einen zuverlässigen Datagrammdienst herzustellen.

QSctpSocket kann in einem von zwei möglichen Modi arbeiten:

  • Kontinuierlicher Byte-Stream (TCP-Emulation).
  • Multi-Stream-Datagramm-Modus.

Um einen kontinuierlichen Byte-Stream-Modus einzustellen, instanziieren Sie QSctpSocket und rufen setMaximumChannelCount() mit einem negativen Wert auf. Dies ermöglicht es, QSctpSocket als reguläres gepuffertes QTcpSocket zu verwenden. Sie können connectToHost() aufrufen, um die Verbindung mit dem Endpunkt zu initiieren, write(), um Daten zu senden und read(), um Daten von der Gegenstelle zu empfangen, aber Sie können keine Nachrichtengrenzen unterscheiden.

Standardmäßig arbeitet QSctpSocket im Datagramm-Modus. Bevor Sie eine Verbindung herstellen, rufen Sie setMaximumChannelCount() auf, um die maximale Anzahl von Kanälen festzulegen, die die Anwendung zu unterstützen bereit ist. Diese Zahl ist ein Parameter, der mit dem entfernten Endpunkt ausgehandelt wird und dessen Wert durch das Betriebssystem begrenzt werden kann. Der Standardwert von 0 bedeutet, dass der Wert der Gegenstelle 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 durch die Aufrufe readChannelCount() und writeChannelCount() abrufen.

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 unabhängig für jeden Kanal durch. Sie können ein Datagramm in den Puffer des aktuellen Kanals einreihen, indem Sie writeDatagram() aufrufen und ein anstehendes Datagramm lesen, indem Sie readDatagram() aufrufen.

Die Verwendung der Standardfunktionen QIODevice read (), readLine(), write() usw. ist im Datagrammmodus mit den gleichen Einschränkungen wie im kontinuierlichen Bytestrommodus zulässig.

Hinweis: Diese Klasse wird auf der Windows-Plattform nicht unterstützt.

Siehe auch QSctpServer, QTcpSocket, und QAbstractSocket.

Dokumentation der Mitgliedsfunktionen

[explicit] QSctpSocket::QSctpSocket(QObject *parent = nullptr)

Erzeugt ein QSctpSocket-Objekt im Zustand UnconnectedState.

Setzt den Datagramm-Betriebsmodus. Das Argument parent wird an den Konstruktor von QObject übergeben.

Siehe auch socketType() und setMaximumChannelCount().

[virtual noexcept] QSctpSocket::~QSctpSocket()

Zerstört den Socket und schließt die Verbindung, falls erforderlich.

Siehe auch close().

[override virtual] void QSctpSocket::close()

Reimplements: QAbstractSocket::close().

[override virtual] void QSctpSocket::disconnectFromHost()

Reimplements: 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 der Kanäle zurück, die QSctpSocket unterstützen kann.

Ein Wert von 0 (der Standardwert) bedeutet, dass die Anzahl der Verbindungskanäle vom entfernten Endpunkt festgelegt wird.

Gibt -1 zurück, wenn QSctpSocket im kontinuierlichen Byte-Stream-Modus läuft.

Siehe auch setMaximumChannelCount(), readChannelCount(), und writeChannelCount().

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

Reimplements: 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 Hostadresse und dem Port des Absenders. Wenn möglich, versucht diese Funktion auch, die Zieladresse des Datagramms, den Port und die Anzahl der Sprünge zum Zeitpunkt des Empfangs zu bestimmen.

Bei einem Fehlschlag wird ein QNetworkDatagram zurückgegeben, das not valid meldet.

Siehe auch writeDatagram(), isInDatagramMode(), und currentReadChannel().

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

Reimplements: 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 soll, und zwar auf count. Ist count gleich 0, wird der Wert des Endpunkts für die maximale Anzahl von Kanälen verwendet. Negativ count setzt einen kontinuierlichen Byte-Stream-Modus.

Rufen Sie diese Methode nur auf, wenn QSctpSocket im UnconnectedState ist.

Siehe auch maximumChannelCount(), readChannelCount(), und writeChannelCount().

bool QSctpSocket::writeDatagram(const QNetworkDatagram &datagram)

Schreibt eine datagram in den Puffer des aktuellen Schreibkanals. Gibt bei Erfolg true zurück; andernfalls wird false zurückgegeben.

Siehe auch readDatagram(), isInDatagramMode(), und currentWriteChannel().

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