Класс QLocalServer
Класс QLocalServer предоставляет сервер на основе локального сокета. Подробнее...
| Заголовок: | #include <QLocalServer> |
| CMake: | find_package(Qt6 COMPONENTS Network REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Network) |
| qmake: | QT += network |
| Наследует: | QObject |
Открытые типы
| Перечисление | SocketOption { NoOptions, UserAccessOption, GroupAccessOption, OtherAccessOption, WorldAccessOption } |
| флаги | SocketOptions |
Свойства
- socketOptions : SocketOptions
Открытые функции
| QLocalServer(QObject *parent = nullptr) | |
| виртуальный | ~QLocalServer() |
| void | close() |
| QString | errorString() const |
| QString | fullServerName() const |
| виртуальный bool | hasPendingConnections() const |
| bool | isListening() const |
| bool | listen(const QString &name) |
| bool | listen(qintptr socketDescriptor) |
| int | maxPendingConnections() const |
| виртуальный QLocalSocket * | nextPendingConnection() |
| QAbstractSocket::SocketError | serverError() const |
| QString | serverName() const |
| void | setMaxPendingConnections(int numConnections) |
| void | setSocketOptions(QLocalServer::SocketOptions options) |
| qintptr | socketDescriptor() const |
| QLocalServer::SocketOptions | socketOptions() const |
| bool | waitForNewConnection(int msec = 0, bool *timedOut = nullptr) |
Сигналы
| void | newConnection() |
Статические открытые члены
| bool | removeServer(const QString &name) |
Защищенные функции
| виртуальный void | incomingConnection(quintptr socketDescriptor) |
Подробное описание
Этот класс позволяет принимать входящие локальные соединения сокета.
Вызовите listen(), чтобы сервер начал прослушивать входящие подключения по указанному ключу. Затем сигнал newConnection() будет испускаться каждый раз, когда клиент подключается к серверу.
Вызовите nextPendingConnection(), чтобы принять ожидающее подключение как подключенный QLocalSocket. Функция возвращает указатель на QLocalSocket, который можно использовать для связи с клиентом.
Если произошла ошибка, serverError() возвращает тип ошибки, а errorString() можно вызвать, чтобы получить удобочитаемое описание произошедшего.
При прослушивании подключений имя, на котором прослушивает сервер, доступно через serverName().
Вызов close() заставляет QLocalServer прекратить прослушивание входящих подключений.
Хотя QLocalServer предназначен для использования с циклом событий, его можно использовать и без него. В этом случае вы должны использовать waitForNewConnection(), который блокируется до тех пор, пока подключение не станет доступным или не истечет тайм-аут.
См. также QLocalSocket и QTcpServer.
Документация по типам членов
[since 5.0] перечисление QLocalServer::SocketOptionфлаги QLocalServer::SocketOptions
Это перечисление описывает возможные параметры, которые можно использовать при создании сокета. Это изменяет разрешения доступа на платформах (Linux, Windows), которые поддерживают разрешения доступа к сокету. Значения GroupAccess и OtherAccess могут немного отличаться в зависимости от платформы.
| Постоянная | Значение | Описание |
|---|---|---|
QLocalServer::NoOptions |
0x0 |
Ограничения доступа не установлены. |
QLocalServer::UserAccessOption |
0x01 |
Доступ ограничен для того же пользователя, что и процесс, создавший сокет. |
QLocalServer::GroupAccessOption |
0x2 |
Доступ ограничен той же группой, но не пользователем, создавшим сокет на Linux. Доступ ограничен основной группой процесса на Windows. |
QLocalServer::OtherAccessOption |
0x4 |
Доступ доступен всем, кроме пользователя и группы, создавших сокет на Linux. Доступ доступен всем на Windows. |
QLocalServer::WorldAccessOption |
0x7 |
Нет ограничений доступа. |
Это перечисление было добавлено или изменено в Qt 5.0.
Тип SocketOptions — это typedef для QFlags<SocketOption>. Он хранит логическое ИЛИ сочетание значений SocketOption.
См. также socketOptions.
Документация по свойствам
[since 5.0] socketOptions : SocketOptions
Это свойство содержит параметры сокета, которые управляют его работой.
Например, сокет может ограничивать доступ к тому, какие идентификаторы пользователей могут подключаться к сокету.
Эти параметры должны быть установлены до вызова listen().
В некоторых случаях, например, с сокетами Unix-домена на Linux, доступ к сокету будет определяться правами доступа к файловой системе и создается на основе umask. Установка флагов доступа переопределит это и ограничит или разрешит доступ в соответствии со спецификацией.
Другие операционные системы на основе Unix, такие как macOS, не учитывают права доступа к файлам для сокетов Unix-домена и по умолчанию имеют WorldAccess, и эти флаги разрешений не будут иметь эффекта.
В Windows, UserAccessOption достаточно, чтобы позволить процессу без повышения привилегий подключиться к локальному серверу, созданному процессом с повышенными привилегиями, запущенным тем же пользователем. GroupAccessOption относится к основной группе процесса (см. TokenPrimaryGroup в документации Windows). OtherAccessOption относится к известной группе "Все".
По умолчанию ни один из флагов не установлен, права доступа — это значение по умолчанию для платформы.
Это свойство было добавлено в Qt 5.0.
Функции доступа:
| QLocalServer::SocketOptions | socketOptions() const |
| void | setSocketOptions(QLocalServer::SocketOptions options) |
См. также listen().
Документация по функциям-членам
QLocalServer::QLocalServer(QObject *parent = nullptr)
Создаёт новый сервер локальных сокетов с заданным parent.
См. также listen().
[signal] void QLocalServer::newConnection()
Этот сигнал излучается каждый раз, когда доступно новое подключение.
См. также hasPendingConnections() и nextPendingConnection().
[virtual] QLocalServer::~QLocalServer()
Удаляет объект QLocalServer. Если сервер прослушивает подключения, он автоматически закрывается.
Любые клиенты QLocalSockets, которые всё ещё подключены, должны либо отключиться, либо быть переприсоединены к новому родителю до удаления сервера.
См. также close().
void QLocalServer::close()
Прекращает прослушивание входящих подключений. Существующие подключения не затрагиваются, но любые новые подключения будут отклоняться.
См. также isListening() и listen().
QString QLocalServer::errorString() const
Возвращает удобочитаемое сообщение, соответствующее текущей ошибке, отчёт о которой возвращает serverError(). Если подходящее сообщение недоступно, возвращается пустая строка.
См. также serverError().
QString QLocalServer::fullServerName() const
Возвращает полный путь, на котором сервер прослушивает подключения.
Примечание: Это зависит от платформы.
См. также listen() и serverName().
[virtual] bool QLocalServer::hasPendingConnections() const
Возвращает true, если сервер имеет ожидающее подключение; в противном случае возвращает false.
См. также nextPendingConnection() и setMaxPendingConnections().
[virtual protected] void QLocalServer::incomingConnection(quintptr socketDescriptor)
Эта виртуальная функция вызывается QLocalServer, когда доступно новое подключение. socketDescriptor — это собственный дескриптор сокета для принятого подключения.
Базовая реализация создаёт QLocalSocket, устанавливает дескриптор сокета и затем сохраняет QLocalSocket в внутреннем списке ожидающих подключений. Наконец, излучается newConnection().
Переопределите эту функцию, чтобы изменить поведение сервера при наличии подключения.
См. также newConnection(), nextPendingConnection() и QLocalSocket::setSocketDescriptor().
bool QLocalServer::isListening() const
Возвращает true, если сервер прослушивает входящие подключения, в противном случае — false.
bool QLocalServer::listen(const QString &name)
Указывает серверу прослушивать входящие подключения по name. Если сервер уже прослушивает подключения, возвращает false. Возвращает true при успехе, иначе false.
name может быть единственным именем, и QLocalServer определит соответствующий путь, специфичный для платформы. serverName() вернёт имя, переданное в listen.
Обычно вы передаёте просто имя, например, "foo", но в Unix это также может быть путь, например, "/tmp/foo", а в Windows — путь к pipe, например, "\\.\pipe\foo"
Примечание: В Unix, если сервер аварийно завершается без закрытия listen, произойдёт ошибка AddressInUseError. Чтобы создать новый сервер, необходимо удалить файл. В Windows два локальных сервера могут прослушивать один и тот же pipe одновременно, но все подключения будут направлены к одному из серверов.
См. также serverName(), isListening() и close().
[since 5.0] bool QLocalServer::listen(qintptr socketDescriptor)
Указывает серверу прослушивать входящие подключения по socketDescriptor. Свойство возвращает false если сервер уже прослушивает. Возвращает true при успехе; в противном случае возвращает false. Сокет должен быть готов к приёму новых подключений без вызова дополнительных функций, специфичных для платформы. Сокет переводится в режим "без блокировки".
serverName(), fullServerName() могут вернуть строку с именем, если это поддерживается платформой; в противном случае они возвращают пустой QString.
Эта функция была добавлена в Qt 5.0.
См. также isListening() и close().
int QLocalServer::maxPendingConnections() const
Возвращает максимальное число ожидающих подключений. По умолчанию — 30.
См. также setMaxPendingConnections() и hasPendingConnections().
[virtual] QLocalSocket *QLocalServer::nextPendingConnection()
Возвращает следующее ожидающее подключение в виде подключённого объекта QLocalSocket.
Сокет создаётся как дочерний элемент сервера, что означает его автоматическое удаление при уничтожении объекта QLocalServer. Тем не менее, рекомендуется удалять объект явно по завершении работы с ним для предотвращения утечки памяти.
nullptr возвращается, если эта функция вызвана, когда нет ожидающих подключений.
См. также hasPendingConnections(), newConnection() и incomingConnection().
[static] bool QLocalServer::removeServer(const QString &name)
Удаляет любой экземпляр сервера, который может привести к ошибке при вызове listen(), и возвращает true при успехе; в противном случае возвращает false. Эта функция предназначена для восстановления после сбоя, когда предыдущий экземпляр сервера не был корректно завершён.
В Windows эта функция ничего не делает; в Unix она удаляет файл сокета, заданный name.
Предупреждение: Будьте осторожны, чтобы не удалять сокеты работающих экземпляров.
QAbstractSocket::SocketError QLocalServer::serverError() const
Возвращает тип ошибки, произошедшей в последний раз, или NoError.
См. также errorString().
QString QLocalServer::serverName() const
Возвращает имя сервера, если сервер прослушивает подключения; в противном случае возвращает QString()
См. также listen() и fullServerName().
void QLocalServer::setMaxPendingConnections(int numConnections)
Устанавливает максимальное число ожидающих принятых подключений в numConnections. QLocalServer примет не более numConnections входящих подключений до вызова nextPendingConnection().
Примечание: Хотя QLocalServer перестанет принимать новые подключения после достижения максимального числа ожидающих подключений, операционная система может всё ещё хранить их в очереди, что приведёт к сигналам о подключении со стороны клиентов.
См. также maxPendingConnections() и hasPendingConnections().
[since 5.10] qintptr QLocalServer::socketDescriptor() const
Возвращает собственный дескриптор сокета, используемый сервером для прослушивания входящих инструкций, или -1, если сервер не прослушивает.
Тип дескриптора зависит от платформы:
- В Windows возвращаемое значение является дескриптором сокета Winsock 2.
- В INTEGRITY возвращаемое значение является дескриптором сокета QTcpServer, а тип определён в socketDescriptor.
- Во всех других операционных системах семейства Unix тип является дескриптором файла, представляющим прослушивающий сокет.
Эта функция была добавлена в Qt 5.10.
См. также listen().
[since 5.0] QLocalServer::SocketOptions QLocalServer::socketOptions() const
Возвращает настройки сокета, установленные на сокете.
Примечание: Функция-получатель для свойства socketOptions.
Эта функция была добавлена в Qt 5.0.
См. также setSocketOptions().
bool QLocalServer::waitForNewConnection(int msec = 0, bool *timedOut = nullptr)
Ожидает не более msec миллисекунд или пока не появится входящее соединение. Возвращает true, если соединение доступно; в противном случае возвращает false. Если операция завершилась по таймауту, и timedOut не nullptr, *timedOut будет установлен в true.
Это блокирующая функция. Её использование не рекомендуется в однопоточной приложении GUI, так как всё приложение перестанет отвечать, пока функция не вернётся. waitForNewConnection() полезна в основном, когда нет доступной очереди событий.
Альтернативный вариант без блокировки — подключение к сигналу newConnection().
Если msec равно -1, функция не будет ожидать истечения времени.
См. также hasPendingConnections() и nextPendingConnection().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.0/qlocalserver.html