Spec-Zone.ru › Qt 5.9

Класс 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()
virtual void disconnectFromHost()
  • 37 открытых функций унаследовано от QAbstractSocket
  • 43 открытых функций унаследовано от QIODevice
  • 32 открытых функций унаследовано от QObject

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

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

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

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

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

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

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

[virtual] void QSctpSocket::close()

Переопределено из QIODevice::close().

[virtual] void QSctpSocket::disconnectFromHost()

Переопределено из QAbstractSocket::disconnectFromHost().

bool QSctpSocket::isInDatagramMode() const

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

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

int QSctpSocket::maximumChannelCount() const

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

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

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

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

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

Переопределено из QIODevice::readData().

QNetworkDatagram QSctpSocket::readDatagram()

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

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

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

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

Переопределено из QIODevice::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.9/qsctpsocket.html

Spec-Zone.ru

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