Класс 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
- 47 открытых функций, унаследованных от QIODevice
- 34 открытых функций, унаследованных от 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
- 1 открытая переменная, унаследованная от QIODevice
- 1 открытая переменная, унаследованная от QObject
- 2 статические открытые члены, унаследованные от QIODevice
- 10 статических открытых членов, унаследованных от QObject
- 10 защищенных функций, унаследованных от QAbstractSocket
- 5 защищенных функций, унаследованных от QIODevice
- 9 защищенных функций, унаследованных от QObject
- 2 защищенных переменных, унаследованных от 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/archives/qt-5.11/qsctpsocket.html