Класс 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