Spec-Zone.ru › Qt

Класс QSctpSocket

Класс QSctpSocket предоставляет сокет SCTP. Подробнее...

Заголовок: #include <QSctpSocket>
CMake: find_package(Qt6 COMPONENTS Network REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Network)
qmake: QT += network
С тех пор: Qt 5.8
Наследуется от: QTcpSocket
  • Список всех членов, включая наследуемые

Открытые функции

QSctpSocket(QObject *parent = nullptr)
virtual ~QSctpSocket()
bool isInDatagramMode() const
int maximumChannelCount() const
QNetworkDatagram readDatagram()
void setMaximumChannelCount(int count)
bool writeDatagram(const QNetworkDatagram &datagram)

Переопределенные открытые функции

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

Переопределенные защищенные функции

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

Подробное описание

SCTP (протокол управления потоком передачи данных) — протокол транспортного уровня, выполняющий аналогичную роль, что и популярные протоколы TCP и UDP. Как и UDP, SCTP ориентирован на сообщения, но обеспечивает надёжную, последовательную передачу сообщений с управлением загрузкой, как TCP.

SCTP — это ориентированный на соединение протокол, который обеспечивает полную одновременную передачу нескольких потоков данных между конечными точками. Эта многопотоковая передача позволяет передавать данные по независимым каналам, поэтому, если происходит потеря данных в одном потоке, передача по другим потокам не затронута.

Как протокол, ориентированный на сообщения, SCTP передает последовательность сообщений, а не непрерывный поток байтов, как TCP. Как и в UDP, отправитель отправляет сообщение за один раз, и это точное сообщение передаётся процессу получателя за один раз. Но в отличие от UDP, доставка гарантируется.

Он также поддерживает множественное подключение, что означает, что подключённая конечная точка может иметь альтернативные IP-адреса, присвоенные ей, для обхода сбоев сети или изменения условий.

QSctpSocket — это удобный подкласс QTcpSocket, который позволяет эмулировать поток данных TCP по SCTP или установить SCTP-соединение для надёжной передачи датаграмм.

QSctpSocket может работать в одном из двух возможных режимов:

  • Непрерывный поток байтов (эмуляция TCP).
  • Режим передачи датаграмм по множеству потоков.

Чтобы установить режим непрерывного потока байтов, создайте экземпляр QSctpSocket и вызовите setMaximumChannelCount() со значением меньше нуля. Это позволяет использовать QSctpSocket как обычный буферизованный QTcpSocket. Вы можете вызвать connectToHost() для инициализации соединения с конечной точкой, write() для передачи и read() для получения данных от партнёра, но вы не можете различать границы сообщений.

По умолчанию QSctpSocket работает в режиме датаграмм. Перед подключением вызовите setMaximumChannelCount(), чтобы установить максимальное количество каналов, которые приложение готово поддерживать. Это число является параметром, согласованным с удалённой конечной точкой, и его значение может быть ограничено операционной системой. Значение по умолчанию 0 означает использование значения партнёра. Если обе конечные точки имеют значения по умолчанию, тогда количество каналов соединения зависит от системы.

После установления соединения вы можете получить фактическое количество каналов, вызвав readChannelCount() и 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();

    ....
}

В режиме датаграмм QSctpSocket выполняет буферизацию датаграмм независимо для каждого канала. Вы можете поместить датаграмму в буфер текущего канала, вызвав writeDatagram(), и прочитать ожидающую датаграмму, вызвав readDatagram(), соответственно.

Использование стандартных функций QIODevice read(), readLine(), write() и т. д. разрешено в режиме датаграмм с теми же ограничениями, что и в режиме непрерывного потока байтов.

Примечание: Эта функция не поддерживается на платформе Windows.

См. также QSctpServer, QTcpSocket и QAbstractSocket.

Документация по функциям членов

QSctpSocket::QSctpSocket(QObject *parent = nullptr)

Создаёт объект QSctpSocket в состоянии UnconnectedState.

Устанавливает режим работы с датаграммами. Аргумент parent передаётся конструктору QObject.

См. также socketType() и setMaximumChannelCount().

[virtual] QSctpSocket::~QSctpSocket()

Удаляет сокет, закрывая соединение при необходимости.

См. также close().

[override virtual] void QSctpSocket::close()

Реализует: QAbstractSocket::close().

[override virtual] void QSctpSocket::disconnectFromHost()

Реализует: QAbstractSocket::disconnectFromHost().

bool QSctpSocket::isInDatagramMode() const

Возвращает true, если сокет работает в режиме датаграмм.

См. также setMaximumChannelCount().

int QSctpSocket::maximumChannelCount() const

Возвращает максимальное количество каналов, которые QSctpSocket может поддерживать.

Значение 0 (по умолчанию) означает, что количество каналов соединения будет установлено удалённой конечной точкой.

Возвращает -1, если QSctpSocket работает в режиме непрерывного потока байтов.

См. также setMaximumChannelCount(), readChannelCount() и writeChannelCount().

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

Реализует: QAbstractSocket::readData(char *data, qint64 maxSize).

QNetworkDatagram QSctpSocket::readDatagram()

Считывает датаграмму из буфера текущего канала чтения и возвращает её как объект QNetworkDatagram вместе с адресом хоста и портом отправителя. Если возможно, эта функция также попытается определить адрес назначения датаграммы, порт и количество прыжков во время приёма.

При неудаче возвращает QNetworkDatagram, который сообщает о том, что он не действителен.

См. также writeDatagram(), isInDatagramMode() и currentReadChannel().

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

Реализует: QAbstractSocket::readLineData(char *data, qint64 maxlen).

void QSctpSocket::setMaximumChannelCount(int count)

Устанавливает максимальное количество каналов, которые приложение готово поддерживать в режиме датаграмм, в count. Если count равно 0, используется значение конечной точки для максимального количества каналов. Отрицательное count устанавливает режим непрерывного потока байтов.

Вызывайте этот метод только тогда, когда QSctpSocket находится в состоянии UnconnectedState.

См. также maximumChannelCount(), readChannelCount() и writeChannelCount().

bool QSctpSocket::writeDatagram(const QNetworkDatagram &datagram)

Записывает datagram в буфер текущего канала записи. Возвращает true при успехе; в противном случае возвращает false.

См. также readDatagram(), isInDatagramMode() и currentWriteChannel().

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.2/qsctpsocket.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API