Spec-Zone.ru › Qt 6.0

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

См. также listen() и close().

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API