Spec-Zone.ru › Qt 5.12

Класс QSctpSocket

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

Заголовок: #include <QSctpSocket>
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
  • 37 открытых функций унаследовано от QAbstractSocket
  • 44 открытых функций унаследовано от QIODevice
  • 31 открытых функций унаследовано от QObject

Статические открытые члены

const QMetaObject staticMetaObject
  • 9 статических открытых членов унаследовано от QObject

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

virtual qint64 readData(char *data, qint64 maxSize) override
virtual qint64 readLineData(char *data, qint64 maxlen) override
  • 10 защищенных функций унаследовано от QAbstractSocket
  • 5 защищенных функций унаследовано от QIODevice
  • 9 защищенных функций унаследовано от QObject

Дополнительные унаследованные члены

  • 1 свойство унаследовано от QObject
  • 1 открытый слот унаследован от QObject
  • 6 сигналов унаследовано от QAbstractSocket
  • 6 сигналов унаследовано от QIODevice
  • 2 сигнала унаследовано от QObject
  • 10 защищенных функций унаследовано от QAbstractSocket
  • 5 защищенных функций унаследовано от QIODevice
  • 9 защищенных функций унаследовано от QObject

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

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

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 *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().

QNetworkDatagram QSctpSocket::readDatagram()

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

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

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

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

Реализовано повторно из QAbstractSocket::readLineData().

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.12/qsctpsocket.html

Spec-Zone.ru

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