Класс QLocalServer
Класс QLocalServer предоставляет сервер на основе локального сокета. Подробнее...
| Заголовок: | #include <QLocalServer> |
| qmake: | QT += network |
| С момента: | Qt 4.4 |
| Наследуется от: | QObject |
Открытые типы
| Перечисление | SocketOption { НетПараметров, ПараметрДоступаПользователя, ПараметрДоступаГруппы, ПараметрДоступаДругого, ПараметрДоступаВсех } |
| флаги | SocketOptions |
Свойства
- socketOptions : SocketOptions
- 1 свойство унаследовано от QObject
Открытые функции
| QLocalServer(QObject *parent = Q_NULLPTR) | |
| ~QLocalServer() | |
| void | close() |
| QString | errorString() const |
| QString | fullServerName() const |
| virtual bool | hasPendingConnections() const |
| bool | isListening() const |
| bool | listen(const QString &name) |
| bool | listen(qintptr socketDescriptor) |
| int | maxPendingConnections() const |
| virtual QLocalSocket * | nextPendingConnection() |
| QAbstractSocket::SocketError | serverError() const |
| QString | serverName() const |
| void | setMaxPendingConnections(int numConnections) |
| void | setSocketOptions(SocketOptions options) |
| SocketOptions | socketOptions() const |
| bool | waitForNewConnection(int msec = 0, bool *timedOut = Q_NULLPTR) |
- 31 открытая функция унаследована от QObject
Сигналы
| void | newConnection() |
- 2 сигнала унаследовано от QObject
Статические открытые члены
| bool | removeServer(const QString &name) |
- 11 статических открытых членов унаследовано от QObject
Защищённые функции
| virtual void | incomingConnection(quintptr socketDescriptor) |
- 9 защищённых функций унаследовано от QObject
Дополнительные унаследованные члены
- 1 открытый слот унаследован от QObject
Подробное описание
Класс QLocalServer предоставляет сервер на основе локального сокета.
Этот класс позволяет принимать входящие локальные подключения по сокету.
Вызовите 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.
Функции доступа:
| SocketOptions | socketOptions() const |
| void | setSocketOptions(SocketOptions options) |
См. также listen().
Документация по функциям-членам
QLocalServer::QLocalServer(QObject *parent = Q_NULLPTR)
Создает новый локальный сервер сокетов с заданным parent.
См. также listen().
QLocalServer::~QLocalServer()
Удаляет объект QLocalServer. Если сервер прослушивает подключения, он автоматически закрывается.
Любые клиентские сокеты QLocalSockets, которые все еще подключены, должны либо отключиться, либо быть переродителями до удаления сервера.
См. также close().
void QLocalServer::close()
Прекращает прослушивание входящих подключений. Существующие соединения не затрагиваются, но любые новые подключения будут отклоняться.
См. также isListening() и listen().
QString QLocalServer::errorString() const
Возвращает удобочитаемое сообщение, соответствующее текущей ошибке, сообщенной serverError(). Если подходящее сообщение недоступно, возвращается пустая строка.
См. также serverError().
QString QLocalServer::fullServerName() const
Возвращает полный путь, на котором сервер прослушивает подключения.
Примечание: это зависит от платформы.
См. также listen() и serverName().
bool QLocalServer::hasPendingConnections() const
Возвращает true, если у сервера есть ожидающее подключение; в противном случае возвращает false.
См. также nextPendingConnection() и setMaxPendingConnections().
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. Свойство возвращает true, если сервер в настоящее время прослушивает, и возвращает true при успехе; в противном случае возвращает false. Сокет должен быть готов принимать новые подключения без вызова дополнительных функций, специфичных для платформы. Сокет переводится в режим без блокировки.
serverName(), fullServerName() могут вернуть строку с именем, если это поддерживается платформой; в противном случае они возвращают пустую QString.
Эта функция была добавлена в Qt 5.0.
См. также isListening() и close().
int QLocalServer::maxPendingConnections() const
Возвращает максимальное количество ожидающих принятых подключений. По умолчанию 30.
См. также setMaxPendingConnections() и hasPendingConnections().
void QLocalServer::newConnection()
Этот сигнал генерируется каждый раз, когда доступно новое подключение.
См. также hasPendingConnections() и nextPendingConnection().
QLocalSocket *QLocalServer::nextPendingConnection()
Возвращает следующее ожидающее подключение как подключенный объект QLocalSocket.
Сокет создается как дочерний элемент сервера, что означает, что он автоматически удаляется при уничтожении объекта QLocalServer. Тем не менее, рекомендуется удалять объект явно, когда он больше не нужен, чтобы избежать утечки памяти.
Возвращает 0, если эта функция вызвана, когда нет ожидающих подключений.
См. также hasPendingConnections(), newConnection() и incomingConnection().
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().
SocketOptions QLocalServer::socketOptions() const
Возвращает параметры сокета, установленные на сокете.
Эта функция была представлена в Qt 5.0.
Примечание: Функция-геттер для свойства socketOptions.
См. также setSocketOptions().
bool QLocalServer::waitForNewConnection(int msec = 0, bool *timedOut = Q_NULLPTR)
Ожидает не более msec миллисекунд или пока не станет доступно входящее подключение. Возвращает true, если подключение доступно; в противном случае возвращает false. Если операция завершилась по таймауту и timedOut не равен 0, *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/archives/qt-5.6/qlocalserver.html