Класс QSctpServer
Класс QSctpServer предоставляет сервер, основанный на протоколе SCTP. Подробнее...
| Заголовок: | #include <QSctpServer> |
| qmake: | QT += network |
| С тех пор: | Qt 5.8 |
| Наследует: | QTcpServer |
Этот класс был представлен в Qt 5.8.
Открытые функции
| QSctpServer(QObject *parent = nullptr) | |
| virtual | ~QSctpServer() |
| int | maximumChannelCount() const |
| QSctpSocket * | nextPendingDatagramConnection() |
| void | setMaximumChannelCount(int count) |
Переопределённые защищённые функции
| virtual void | incomingConnection(qintptr socketDescriptor) override |
Подробное описание
SCTP (Stream Control Transmission Protocol) — это протокол транспортного уровня, выполняющий аналогичную функцию, как популярные протоколы TCP и UDP. Как и UDP, SCTP ориентирован на сообщения, но он гарантирует надёжную, последовательную передачу сообщений с управлением задержками, как и TCP. Подробности протокола см. в документации QSctpSocket.
QSctpServer — это удобный подкласс QTcpServer, который позволяет принимать входящие подключения к сокету SCTP либо в режиме эмуляции TCP, либо в режиме дейтаграмм.
Наиболее распространённый способ использования QSctpServer — создание объекта и установка максимального количества каналов, которые сервер готов поддерживать, вызывая setMaximumChannelCount(). Режим эмуляции TCP можно установить, передав отрицательное значение в этом вызове. Также специальное значение 0 (по умолчанию) указывает на использование значения удалённой стороны в качестве фактического количества каналов. Новое входящее соединение наследует это число от дескриптора сокета сервера и корректирует его в соответствии с параметрами удалённого узла.
В режиме эмуляции TCP подключенные клиенты используют один непрерывный поток байтов для передачи данных, и QSctpServer действует как обычный QTcpServer. Вызовите nextPendingConnection(), чтобы принять ожидающее соединение как подключённый QTcpSocket. Функция возвращает указатель на QTcpSocket в состоянии QAbstractSocket::ConnectedState, который можно использовать для связи с клиентом. Этот режим предоставляет доступ только к основным функциям протокола SCTP. Сокет передает пакеты SCTP по IP на уровне системы и взаимодействует с приложением через интерфейс QTcpSocket.
В отличие от этого, режим дейтаграмм ориентирован на сообщения и предоставляет полную одновременную передачу нескольких потоков данных между конечными точками. Вызовите nextPendingDatagramConnection(), чтобы принять ожидающее соединение в режиме дейтаграмм как подключённый QSctpSocket.
Примечание: Эта функция не поддерживается на платформе Windows.
См. также QTcpServer, QSctpSocket и QAbstractSocket.
Документация по функциям членов
QSctpServer::QSctpServer(QObject *parent = nullptr)
Создаёт объект QSctpServer.
Устанавливает режим работы с дейтаграммами. Аргумент parent передаётся в конструктор QObject.
См. также setMaximumChannelCount(), listen() и setSocketDescriptor().
[virtual] QSctpServer::~QSctpServer()
Удаляет объект QSctpServer. Если сервер ожидает подключения, сокет автоматически закрывается.
См. также close().
[override virtual protected] void QSctpServer::incomingConnection(qintptr socketDescriptor)
Переопределяет: QTcpServer::incomingConnection(qintptr socketDescriptor).
int QSctpServer::maximumChannelCount() const
Возвращает максимальное количество каналов, которые могут поддерживать принятые сокеты.
Значение 0 (по умолчанию) означает, что количество каналов подключения будет установлено удалённой конечной точкой.
Возвращает -1, если QSctpServer работает в режиме эмуляции TCP.
См. также setMaximumChannelCount().
QSctpSocket *QSctpServer::nextPendingDatagramConnection()
Возвращает следующее ожидающее соединение в режиме дейтаграмм как подключённый объект QSctpSocket.
Соединение в режиме дейтаграмм обеспечивает ориентированную на сообщения многопоточную связь.
Сокет создаётся как дочерний элемент сервера, что означает, что он автоматически удаляется при уничтожении объекта QSctpServer. Тем не менее, рекомендуется явно удалять объект, когда вы закончили с ним, чтобы избежать потерь памяти.
Функция возвращает значение null, если нет ожидающих подключений в режиме дейтаграмм.
Примечание: Возвращаемый объект QSctpSocket нельзя использовать из другого потока. Если вам нужно использовать входящее соединение из другого потока, вам необходимо переопределить incomingConnection().
См. также hasPendingConnections(), nextPendingConnection() и QSctpSocket.
void QSctpServer::setMaximumChannelCount(int count)
Устанавливает максимальное количество каналов, которые сервер готов поддерживать в режиме дейтаграмм, на count. Если count равно 0, используется значение максимального количества каналов удалённой конечной точки. Отрицательное значение count устанавливает режим эмуляции TCP.
Вызывайте этот метод только когда QSctpServer находится в состоянии UnconnectedState.
См. также maximumChannelCount() и QSctpSocket.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.14/qsctpserver.html