Класс QSctpServer
Класс QSctpServer предоставляет сервер на основе протокола SCTP. Подробнее...
| Заголовок: | #include <QSctpServer> |
| CMake: | find_package(Qt6 COMPONENTS Network REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Network) |
| qmake: | QT += network |
| С версии: | Qt 5.8 |
| Наследует: | QTcpServer |
Открытые функции
| 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-6.1/qsctpserver.html