Spec-Zone.ru › Qt 5.15

Класс QSctpSocket

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

Заголовок: #include <QSctpSocket>
qmake: QT += network
С тех пор: Qt 5.8
Наследует: QTcpSocket

Этот класс был представлен в Qt 5.8.

  • Список всех членов, включая унаследованные

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

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 (Stream Control Transmission Protocol) — это протокол транспортного уровня, выполняющий похожую роль, как популярные протоколы 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 выполняет буферизацию датаграмм независимо для каждого канала. Вы можете поместить датаграмму в буфер текущего канала, вызвав 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-5.15/qsctpsocket.html

Spec-Zone.ru

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