Класс QLocalSocket
Класс QLocalSocket предоставляет локальный сокет. Подробнее...
| Заголовок: | #include <QLocalSocket> |
| CMake: | find_package(Qt6 COMPONENTS Network REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Network) |
| qmake: | QT += network |
| Наследуется от: | QIODevice |
Открытые типы
| перечисление | ОшибкаЛокальногоСокета { ОшибкаОтказаВПодключении, ОшибкаЗакрытияУдаленногоСокета, ОшибкаСервера, ОшибкаДоступаКСокету, ОшибкаРесурсаСокета, …, НеизвестнаяОшибкаСокета } |
| перечисление | СостояниеЛокальногоСокета { Неподключено, Подключение, Подключено, Закрытие } |
| перечисление | ПараметрСокета { БезПараметров, ПараметрАбстрактногоИмениПространства } |
| флаги | ПараметрыСокета |
Свойства
- параметрыСокета : ПараметрыСокета
Открытые функции
| QLocalSocket(QObject *родитель = nullptr) | |
| виртуальный | ~QLocalSocket() |
| void | прервать() |
| void | подключитьсяКСерверу(QIODeviceBase::OpenMode режимОткрытия = ReadWrite) |
| void | подключитьсяКСерверу(const QString &имя, QIODeviceBase::OpenMode режимОткрытия = ReadWrite) |
| void | отключитьсяОтСервера() |
| QLocalSocket::ОшибкаЛокальногоСокета | ошибка() const |
| bool | очиститьБуфер() |
| QString | полноеИмяСервера() const |
| bool | действителен() const |
| qint64 | размерБуфераЧтения() const |
| QString | имяСервера() const |
| void | установитьРазмерБуфераЧтения(qint64 размер) |
| void | установитьИмяСервера(const QString &имя) |
| bool | установитьДескрипторСокета(qintptr дескрипторСокета, QLocalSocket::СостояниеЛокальногоСокета состояниеСокета = ConnectedState, QIODeviceBase::OpenMode режимОткрытия = ReadWrite) |
| void | установитьПараметрыСокета(QLocalSocket::ПараметрыСокета параметр) |
| qintptr | дескрипторСокета() const |
| QLocalSocket::ПараметрыСокета | параметрыСокета() const |
| QLocalSocket::СостояниеЛокальногоСокета | состояние() const |
| bool | подождатьПодключения(int мс = 30000) |
| bool | подождатьОтключения(int мс = 30000) |
Переопределенные открытые функции
| виртуальный qint64 | доступныеБайты() const override |
| виртуальный qint64 | байтыНаЗапись() const override |
| виртуальный bool | можноПрочитатьСтроку() const override |
| виртуальный void | закрыть() override |
| виртуальный bool | последовательный() const override |
| виртуальный bool | открыть(QIODeviceBase::OpenMode режимОткрытия = ReadWrite) override |
| виртуальный bool | подождатьЗаписиБайтов(int мс = 30000) override |
| виртуальный bool | подождатьГотовностиКЧтению(int мс = 30000) override |
Сигналы
| void | connected() |
| void | disconnected() |
| void | errorOccurred(QLocalSocket::LocalSocketError socketError) |
| void | stateChanged(QLocalSocket::LocalSocketState socketState) |
Переопределённые защищённые функции
| virtual qint64 | readData(char *data, qint64 c) override |
| virtual qint64 | skipData(qint64 maxSize) override |
| virtual qint64 | writeData(const char *data, qint64 c) override |
Подробное описание
В Windows это именованная труба, а в Unix — сокет локальной области.
Если произошла ошибка, error() возвращает тип ошибки, а errorString() можно вызвать, чтобы получить удобочитаемое описание произошедшего.
Хотя QLocalSocket предназначен для использования с циклом событий, его можно использовать и без него. В этом случае необходимо использовать waitForConnected(), waitForReadyRead(), waitForBytesWritten() и waitForDisconnected(), которые блокируются до завершения операции или истечения срока ожидания.
См. также QLocalServer.
Документация по типам членов
Перечисление QLocalSocket::LocalSocketError
Перечисление LocalServerError представляет ошибки, которые могут возникнуть. Последнюю ошибку можно получить, вызвав QLocalSocket::error().
| Постоянная | Значение | Описание |
|---|---|---|
QLocalSocket::ConnectionRefusedError |
QAbstractSocket::ConnectionRefusedError |
Подключение отклонено удалённым узлом (или истекло время ожидания). |
QLocalSocket::PeerClosedError |
QAbstractSocket::RemoteHostClosedError |
Удалённый сокет закрыл подключение. Обратите внимание, что сокет клиента (т.е., этот сокет) будет закрыт после отправки уведомления о закрытии удалённого сокета. |
QLocalSocket::ServerNotFoundError |
QAbstractSocket::HostNotFoundError |
Имя локального сокета не найдено. |
QLocalSocket::SocketAccessError |
QAbstractSocket::SocketAccessError |
Операция с сокетом не выполнена из-за отсутствия необходимых привилегий у приложения. |
QLocalSocket::SocketResourceError |
QAbstractSocket::SocketResourceError |
Локальная система исчерпала ресурсы (например, слишком много сокетов). |
QLocalSocket::SocketTimeoutError |
QAbstractSocket::SocketTimeoutError |
Операция с сокетом истекла по времени ожидания. |
QLocalSocket::DatagramTooLargeError |
QAbstractSocket::DatagramTooLargeError |
Размер датаграммы превысил системный лимит (который может быть низким, например, 8192 байта). |
QLocalSocket::ConnectionError |
QAbstractSocket::NetworkError |
Возникла ошибка при подключении. |
QLocalSocket::UnsupportedSocketOperationError |
QAbstractSocket::UnsupportedSocketOperationError |
Запрошенная операция с сокетом не поддерживается локальной операционной системой. |
QLocalSocket::OperationError |
QAbstractSocket::OperationError |
Попытка операции, когда состояние сокета не позволяло её выполнить. |
QLocalSocket::UnknownSocketError |
QAbstractSocket::UnknownSocketError |
Произошла неизвестная ошибка. |
enum QLocalSocket::LocalSocketState
Этот перечисление описывает различные состояния сокета.
| Постоянная | Значение | Описание |
|---|---|---|
QLocalSocket::UnconnectedState |
QAbstractSocket::UnconnectedState |
Сокет не подключён. |
QLocalSocket::ConnectingState |
QAbstractSocket::ConnectingState |
Сокет начал установку подключения. |
QLocalSocket::ConnectedState |
QAbstractSocket::ConnectedState |
Подключение установлено. |
QLocalSocket::ClosingState |
QAbstractSocket::ClosingState |
Сокет закрывается (данные могут всё ещё ожидать записи). |
См. также QLocalSocket::state().
[since 6.2] перечисление QLocalSocket::SocketOptionфлаги QLocalSocket::SocketOptions
Это перечисление описывает возможные параметры, которые могут быть использованы для подключения к серверу. В настоящее время в Linux и Android используется для указания подключения к серверу, слушающему сокет, привязанный к абстрактному адресу.
| Постоянная | Значение | Описание |
|---|---|---|
QLocalSocket::NoOptions |
0x00 |
Нет параметров установлено. |
QLocalSocket::AbstractNamespaceOption |
0x01 |
Сокет будет пытаться подключиться к абстрактному адресу. Этот флаг специфичен для Linux и Android. На других платформах он игнорируется. |
Это перечисление было введено или изменено в Qt 6.2.
Тип SocketOptions — это typedef для QFlags<SocketOption>. Он хранит логическое ИЛИ комбинацию значений SocketOption.
См. также socketOptions.
Документация по свойствам
[bindable, since 6.2] socketOptions : SocketOptions
Примечание: Это свойство поддерживает привязки QProperty.
Это свойство содержит параметры сокета.
Параметры необходимо установить, когда сокет находится в состоянии UnconnectedState.
Это свойство было введено в Qt 6.2.
См. также connectToServer().
Документация по членам функций
QLocalSocket::QLocalSocket(QObject *parent = nullptr)
Создаёт новый локальный сокет. Аргумент parent передаётся конструктору QObject.
[signal] void QLocalSocket::connected()
Этот сигнал испускается после того, как connectToServer() был вызван и подключение было успешно установлено.
См. также connectToServer() и disconnected().
[signal] void QLocalSocket::disconnected()
Этот сигнал испускается, когда сокет был отключён.
См. также connectToServer(), disconnectFromServer(), abort(), и connected().
[signal, since 5.15] void QLocalSocket::errorOccurred(QLocalSocket::LocalSocketError socketError)
Этот сигнал испускается после возникновения ошибки. Параметр socketError описывает тип ошибки, которая произошла.
QLocalSocket::LocalSocketError — это не зарегистрированный тип метаданных, поэтому для очереди подключений необходимо зарегистрировать его с помощью Q_DECLARE_METATYPE() и qRegisterMetaType().
Эта функция была введена в Qt 5.15.
См. также error(), errorString(), и Создание пользовательских типов Qt.
[signal] void QLocalSocket::stateChanged(QLocalSocket::LocalSocketState socketState)
Этот сигнал испускается всякий раз, когда состояние QLocalSocket меняется. Параметр socketState — это новое состояние.
QLocalSocket::SocketState — это не зарегистрированный тип метаданных, поэтому для очереди подключений необходимо зарегистрировать его с помощью Q_DECLARE_METATYPE() и qRegisterMetaType().
См. также state() и Создание пользовательских типов Qt.
[virtual] QLocalSocket::~QLocalSocket()
Удаляет сокет, закрывая подключение, если необходимо.
void QLocalSocket::abort()
Прерывает текущее подключение и сбрасывает сокет. В отличие от disconnectFromServer(), эта функция сразу закрывает сокет, очищая любые ожидающие данные в буфере записи.
См. также disconnectFromServer() и close().
[override virtual] qint64 QLocalSocket::bytesAvailable() const
Переопределяет: QIODevice::bytesAvailable() const.
[override virtual] qint64 QLocalSocket::bytesToWrite() const
Переопределяет: QIODevice::bytesToWrite() const.
[override virtual] bool QLocalSocket::canReadLine() const
Переопределяет: QIODevice::canReadLine() const.
[override virtual] void QLocalSocket::close()
Переопределяет: QIODevice::close().
[since 5.1] void QLocalSocket::connectToServer(QIODeviceBase::OpenMode openMode = ReadWrite)
Пытается установить подключение к serverName(). setServerName() необходимо вызвать перед открытием соединения. В качестве альтернативы можно использовать connectToServer(const QString &name, OpenMode openMode);
Сокет открывается в заданном openMode и сначала переходит в состояние ConnectingState. Если подключение установлено, QLocalSocket переходит в состояние ConnectedState и испускает connected().
После вызова этой функции сокет может испустить errorOccurred() для сигнализации о возникшей ошибке.
Эта функция была введена в Qt 5.1.
См. также state(), serverName(), и waitForConnected().
END_OF_DOCUMENT_MARKERvoid QLocalSocket::connectToServer(const QString &name, QIODeviceBase::OpenMode openMode = ReadWrite)
Это перегруженный метод.
Устанавливает имя сервера name и пытается подключиться к нему.
Сокет открывается в указанном режиме openMode и сначала переходит в состояние ConnectingState. Если соединение установлено, QLocalSocket переходит в состояние ConnectedState и испускает сигнал connected().
После вызова этого метода сокет может испустить сигнал errorOccurred() для сигнализации об ошибке.
См. также state(), serverName() и waitForConnected().
void QLocalSocket::disconnectFromServer()
Пытается закрыть сокет. Если ожидаются данные для записи, QLocalSocket перейдёт в состояние ClosingState и будет ожидать, пока все данные не будут записаны. В конечном итоге, он перейдёт в состояние UnconnectedState и испустит сигнал disconnected().
См. также connectToServer().
QLocalSocket::LocalSocketError QLocalSocket::error() const
Возвращает тип последней ошибки.
См. также state() и errorString().
bool QLocalSocket::flush()
Этот метод записывает как можно больше данных из внутреннего буфера записи в сокет без блокировки. Если какие-либо данные были записаны, этот метод возвращает true; в противном случае возвращает false.
Вызовите этот метод, если вам нужно, чтобы QLocalSocket немедленно начал отправлять буферизованные данные. Количество успешно записанных байтов зависит от операционной системы. В большинстве случаев вызывать этот метод не нужно, так как QLocalSocket будет автоматически отправлять данные, как только управление вернётся в цикл событий. При отсутствии цикла событий, вызовите waitForBytesWritten() вместо этого.
См. также write() и waitForBytesWritten().
QString QLocalSocket::fullServerName() const
Возвращает путь к серверу, к которому подключён сокет.
Примечание: Значение, возвращаемое этим методом, зависит от платформы.
См. также connectToServer() и serverName().
[override virtual] bool QLocalSocket::isSequential() const
Переопределяет: QIODevice::isSequential() const.
bool QLocalSocket::isValid() const
Возвращает true , если сокет валиден и готов к использованию; в противном случае возвращает false.
Примечание: Состояние сокета должно быть ConnectedState перед чтением и записью.
См. также state() и connectToServer().
[override virtual] bool QLocalSocket::open(QIODeviceBase::OpenMode openMode = ReadWrite)
Переопределяет: QIODevice::open(QIODeviceBase::OpenMode mode).
Эквивалентно connectToServer(OpenMode mode). Сокет открывается в заданном режиме openMode для сервера, определённого методом setServerName().
Обратите внимание, что в отличие от большинства других подклассов QIODevice, open() может не открыть устройство непосредственно. Метод возвращает false, если сокет уже был подключен или если сервер для подключения не был определен, и true в любом другом случае. Сигналы connected() или errorOccurred() будут испущены, когда устройство фактически будет открыто (или подключение не удастся).
См. connectToServer() для получения дополнительной информации.
qint64 QLocalSocket::readBufferSize() const
Возвращает размер внутреннего буфера чтения. Это ограничивает количество данных, которые клиент может получить, прежде чем вы вызовете read() или readAll(). Размер буфера чтения 0 (по умолчанию) означает, что буфер не имеет ограничений по размеру, гарантируя, что данные не будут потеряны.
См. также setReadBufferSize() и read().
[override virtual protected] qint64 QLocalSocket::readData(char *data, qint64 c)
Переопределяет: QIODevice::readData(char *data, qint64 maxSize).
QString QLocalSocket::serverName() const
Возвращает имя узла, заданное методом setServerName(), или пустую строку QString, если метод setServerName() не был вызван или подключение connectToServer() не удалось.
См. также setServerName(), connectToServer() и fullServerName().
void QLocalSocket::setReadBufferSize(qint64 size)
Устанавливает размер внутреннего буфера чтения QLocalSocket в size байт.
Если размер буфера ограничен, QLocalSocket не будет буферизовать больше, чем этот размер данных. В исключительных случаях, размер буфера 0 означает, что буфер чтения не ограничен и все входящие данные буферизуются. Это значение по умолчанию.
Этот параметр полезен, если вы читаете данные только в определённые моменты времени (например, в приложении для потоковой передачи в реальном времени) или если вы хотите защитить сокет от получения слишком большого объёма данных, что может привести к недостатку памяти в вашем приложении.
См. также readBufferSize() и read().
[since 5.1] void QLocalSocket::setServerName(const QString &name)
Устанавливает имя name узла для подключения. В Windows это имя именованной папки; в Unix это имя локального сокета домена.
Этот метод должен быть вызван, когда сокет не подключён.
Этот метод был представлен в Qt 5.1.
См. также serverName().
bool QLocalSocket::setSocketDescriptor(qintptr socketDescriptor, QLocalSocket::LocalSocketState socketState = ConnectedState, QIODeviceBase::OpenMode openMode = ReadWrite)
Инициализирует QLocalSocket с дескриптором нативного сокета socketDescriptor. Возвращает true если socketDescriptor принят как действительный дескриптор сокета; в противном случае возвращает false. Сокет открывается в режиме, указанном в openMode, и переходит в состояние сокета, указанное в socketState.
Примечание: Невозможно инициализировать два локальных сокета с одним и тем же дескриптором нативного сокета.
См. также socketDescriptor(), state() и openMode().
[override virtual protected] qint64 QLocalSocket::skipData(qint64 maxSize)
Переопределяет: QIODevice::skipData(qint64 maxSize).
qintptr QLocalSocket::socketDescriptor() const
Возвращает дескриптор нативного сокета объекта QLocalSocket, если он доступен; в противном случае возвращает -1.
Дескриптор сокета недоступен, когда QLocalSocket находится в состоянии UnconnectedState. Тип дескриптора зависит от платформы:
- В Windows возвращаемое значение является дескриптором сокета Winsock 2.
- В INTEGRITY возвращаемое значение является дескриптором сокета QTcpSocket, а тип определяется методом socketDescriptor.
- Во всех других операционных системах типа Unix тип представляет собой дескриптор файла, представляющий сокет.
См. также setSocketDescriptor().
QLocalSocket::LocalSocketState QLocalSocket::state() const
Возвращает состояние сокета.
См. также error().
[override virtual] bool QLocalSocket::waitForBytesWritten(int msecs = 30000)
Переопределяет: QIODevice::waitForBytesWritten(int msecs).
bool QLocalSocket::waitForConnected(int msecs = 30000)
Ожидает подключения сокета до msecs миллисекунд. Если подключение установлено, функция возвращает true; в противном случае возвращает false. В случае возвращения false, вы можете вызвать error() для определения причины ошибки.
Следующий пример ожидает установления соединения до одной секунды:
socket->connectToServer("market");
if (socket->waitForConnected(1000))
qDebug("Connected!"); Если msecs равно -1, функция не будет ожидать истечения времени.
См. также connectToServer() и connected().
bool QLocalSocket::waitForDisconnected(int msecs = 30000)
Ожидает разъединения сокета до msecs миллисекунд. Если подключение было успешно разъединено, функция возвращает true; в противном случае возвращает false (если время ожидания истекло, произошла ошибка или этот QLocalSocket уже разъединён). В случае возвращения false, вы можете вызвать error() для определения причины ошибки.
Следующий пример ожидает закрытия соединения до одной секунды:
socket->disconnectFromServer();
if (socket->state() == QLocalSocket::UnconnectedState
|| socket->waitForDisconnected(1000)) {
qDebug("Disconnected!");
} Если msecs равно -1, функция не будет ожидать истечения времени.
См. также disconnectFromServer() и close().
[override virtual] bool QLocalSocket::waitForReadyRead(int msecs = 30000)
Переопределяет: QIODevice::waitForReadyRead(int msecs).
Функция блокируется до тех пор, пока данные не станут доступны для чтения и не будет отправлен сигнал readyRead(). Функция ожидает истечения msecs миллисекунд; значение по умолчанию составляет 30000 миллисекунд.
Функция возвращает true если данные доступны для чтения; в противном случае возвращает false (если произошла ошибка или время ожидания истекло).
См. также waitForBytesWritten().
[override virtual protected] qint64 QLocalSocket::writeData(const char *data, qint64 c)
Переопределяет: QIODevice::writeData(const char *data, qint64 maxSize).
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.2/qlocalsocket.html