Класс 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
Возвращает опции сокета, установленные на сокете.
Примечание: Метод-получатель для свойства 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-5.15/qlocalserver.html