Класс QLocalServer
Класс QLocalServer предоставляет сервер на основе локального сокета. Подробнее...
| Заголовок: | #include <QLocalServer> |
| qmake: | QT += network |
| С момента: | Qt 4.4 |
| Наследует: | QObject |
Этот класс был представлен в Qt 4.4.
Открытые типы
| перечисление | SocketOption { НетПараметров, ПараметрДоступаПользователя, ПараметрДоступаГруппы, ПараметрДоступаДругих, ПараметрДоступаВсем } |
| флаги | 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.
Документация по типу члена
перечисление 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 является псевдонимом для QFlags<SocketOption>. Он хранит логическое ИЛИ комбинацию значений SocketOption.
См. также socketOptions.
Документация по свойству
socketOptions : SocketOptions
Метод setSocketOptions контролирует работу сокета. Например, сокет может ограничивать доступ к тому, какие идентификаторы пользователей могут подключаться к сокету.
Эти параметры должны быть установлены до вызова 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\foo"
Примечание: В Unix, если сервер аварийно завершается без закрытия listen, произойдёт ошибка AddressInUseError. Чтобы создать новый сервер, файл должен быть удалён. В Windows два локальных сервера могут прослушивать один и тот же пайп одновременно, но любые подключения будут идти к одному из серверов.
См. также serverName(), isListening(), и close().
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.
Предупреждение: Будьте осторожны, чтобы не удалять сокеты работающих экземпляров.
Эта функция была введена в Qt 4.5.
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().
qintptr QLocalServer::socketDescriptor() const
Возвращает системный дескриптор сокета, используемый сервером для прослушивания входящих запросов, или -1, если сервер не прослушивает.
Тип дескриптора зависит от платформы:
- В Windows возвращаемое значение является Winsock 2 Socket Handle.
- С WinRT и в INTEGRITY, возвращаемое значение является дескриптором сокета QTcpServer, и тип определяется socketDescriptor.
- На всех других UNIX-подобных операционных системах, тип — это дескриптор файла, представляющий прослушивающий сокет.
Эта функция была введена в Qt 5.10.
См. также listen().
QLocalServer::SocketOptions QLocalServer::socketOptions() const
Возвращает параметры сокета, установленные на сокете.
Эта функция была введена в Qt 5.0.
Примечание: Функция-получатель для свойства socketOptions.
См. также 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-5.14/qlocalserver.html