Класс QLocalSocket
Класс QLocalSocket предоставляет локальный сокет. Подробнее...
| Заголовок: | #include <QLocalSocket> |
| qmake: | QT += network |
| С тех пор: | Qt 4.4 |
| Наследуется от: | QIODevice |
Этот класс был представлен в Qt 4.4.
Открытые типы
| перечисление | LocalSocketError { ОшибкаОтказаВПодключении, ОшибкаЗакрытияСоединенияКлиентом, ОшибкаСервера, ОшибкаДоступаКСокету, ОшибкаРесурсаСокета, …, НеизвестнаяОшибкаСокета } |
| перечисление | LocalSocketState { СостояниеОтсутствияПодключения, СостояниеПодключения, СостояниеПодключен, СостояниеЗакрытия } |
Открытые функции
| QLocalSocket(QObject *parent = nullptr) | |
| виртуальный | ~QLocalSocket() |
| void | abort() |
| void | connectToServer(QIODevice::OpenMode openMode = ReadWrite) |
| void | connectToServer(const QString &name, QIODevice::OpenMode openMode = ReadWrite) |
| void | disconnectFromServer() |
| QLocalSocket::LocalSocketError | error() const |
| bool | flush() |
| QString | fullServerName() const |
| bool | isValid() const |
| qint64 | readBufferSize() const |
| QString | serverName() const |
| void | setReadBufferSize(qint64 size) |
| void | setServerName(const QString &name) |
| bool | setSocketDescriptor(qintptr socketDescriptor, QLocalSocket::LocalSocketState socketState = ConnectedState, QIODevice::OpenMode openMode = ReadWrite) |
| qintptr | socketDescriptor() const |
| QLocalSocket::LocalSocketState | state() const |
| bool | waitForConnected(int msecs = 30000) |
| bool | waitForDisconnected(int msecs = 30000) |
Переопределённые открытые функции
| виртуальный qint64 | bytesAvailable() const override |
| виртуальный qint64 | bytesToWrite() const override |
| виртуальный bool | canReadLine() const override |
| виртуальный void | close() override |
| виртуальный bool | isSequential() const override |
| виртуальный bool | open(QIODevice::OpenMode openMode = ReadWrite) override |
| виртуальный bool | waitForBytesWritten(int msecs = 30000) override |
| виртуальный bool | waitForReadyRead(int msecs = 30000) override |
Сигналы
| void | connected() |
| void | disconnected() |
| void | error(QLocalSocket::LocalSocketError socketError) |
| void | stateChanged(QLocalSocket::LocalSocketState socketState) |
Переопределённые защищённые функции
| виртуальный qint64 | readData(char *data, qint64 c) override |
| виртуальный qint64 | writeData(const char *data, qint64 c) override |
Подробное описание
В Windows это именованная труба, а в Unix — локальный сокет доменной области.
Если произошла ошибка, error() возвращает тип ошибки, а errorString() можно вызвать, чтобы получить удобочитаемое описание произошедшего.
Хотя QLocalSocket предназначен для использования со циклом событий, его можно использовать и без него. В этом случае необходимо использовать waitForConnected(), waitForReadyRead(), waitForBytesWritten() и waitForDisconnected(), которые блокируют выполнение, пока операция не завершится или не истечёт время ожидания.
См. также QLocalServer.
Документация по типам членов
перечисление QLocalSocket::LocalSocketError
Перечисление LocalServerError представляет ошибки, которые могут произойти. Последняя ошибка может быть получена с помощью вызова QLocalSocket::error().
END_OF_DOCUMENT_MARKER| Постоянная | Значение | Описание |
|---|---|---|
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().
Документация по членам-функциям
QLocalSocket::QLocalSocket(QObject *parent = nullptr)
Создаёт новый локальный сокет. Аргумент parent передаётся конструктору QObject.
Соединение установленоvoid QLocalSocket::connected()
Этот сигнал генерируется после вызова connectToServer() и успешного установления соединения.
См. также connectToServer() и disconnected().
Отключениеvoid QLocalSocket::disconnected()
Этот сигнал генерируется при отключении сокета.
См. также connectToServer(), disconnectFromServer(), abort() и connected().
Ошибкаvoid QLocalSocket::error(QLocalSocket::LocalSocketError socketError)
Этот сигнал генерируется после возникновения ошибки. Параметр socketError описывает тип произошедшей ошибки.
QLocalSocket::LocalSocketError — не зарегистрированный тип метаданных, поэтому для очередей подключений вам нужно зарегистрировать его с помощью Q_DECLARE_METATYPE() и qRegisterMetaType().
Примечание: Сигнал error перегружен в этом классе. Для подключения к этому сигналу с помощью синтаксиса указателя на функцию Qt предоставляет удобную вспомогательную функцию для получения указателя на функцию, как показано в этом примере:
connect(localSocket, QOverload<QLocalSocket::LocalSocketError>::of(&QLocalSocket::error),
[=](QLocalSocket::LocalSocketError socketError){ /* ... */ }); См. также error(), errorString() и Создание пользовательских типов Qt.
Изменение состоянияvoid QLocalSocket::stateChanged(QLocalSocket::LocalSocketState socketState)
Этот сигнал генерируется всякий раз, когда состояние QLocalSocket изменяется. Параметр socketState — новое состояние.
QLocalSocket::SocketState — не зарегистрированный тип метаданных, поэтому для очередей подключений вам нужно зарегистрировать его с помощью Q_DECLARE_METATYPE() и qRegisterMetaType().
См. также state() и Создание пользовательских типов Qt.
Деструктор QLocalSocket~QLocalSocket()
Уничтожает сокет, закрывая подключение при необходимости.
Прерватьvoid QLocalSocket::abort()
Прерывает текущее подключение и сбрасывает сокет. В отличие от disconnectFromServer(), эта функция сразу закрывает сокет, очищая любые ожидающие данные в буфере записи.
См. также disconnectFromServer() и close().
Доступные байтыqint64 QLocalSocket::bytesAvailable() const
Реализует: QIODevice::bytesAvailable() const.
Байты для записиqint64 QLocalSocket::bytesToWrite() const
Реализует: QIODevice::bytesToWrite() const.
Можно прочитать строкуbool QLocalSocket::canReadLine() const
Реализует: QIODevice::canReadLine() const.
Закрытьvoid QLocalSocket::close()
Реализует: QIODevice::close().
Подключиться к серверуvoid QLocalSocket::connectToServer(QIODevice::OpenMode openMode = ReadWrite)
Попытка подключения к serverName(). setServerName() необходимо вызвать перед открытием подключения. В качестве альтернативы можно использовать connectToServer(const QString &name, OpenMode openMode);
Сокет открывается в заданном openMode и сначала переходит в состояние ConnectingState. При установлении соединения QLocalSocket переходит в состояние ConnectedState и генерирует connected().
После вызова этой функции, сокет может генерировать error() для сигнализации об ошибке.
Эта функция была добавлена в Qt 5.1.
См. также state(), serverName() и waitForConnected().
Подключиться к серверуvoid QLocalSocket::connectToServer(const QString &name, QIODevice::OpenMode openMode = ReadWrite)
Это перегруженная функция.
Устанавливает имя сервера name и пытается подключиться к нему.
Сокет открывается в заданном openMode и сначала переходит в состояние ConnectingState. При установлении соединения QLocalSocket переходит в состояние ConnectedState и генерирует connected().
После вызова этой функции, сокет может генерировать error() для сигнализации об ошибке.
См. также state(), serverName() и waitForConnected().
Отключиться от сервераvoid QLocalSocket::disconnectFromServer()
Пытается закрыть сокет. Если ожидающие данные для записи есть, QLocalSocket перейдёт в состояние ClosingState и будет ждать, пока все данные не будут записаны. В конечном итоге он перейдёт в состояние UnconnectedState и сгенерирует сигнал disconnectedFromServer().
См. также 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(QIODevice::OpenMode openMode = ReadWrite)
Реализует: QIODevice::open(QIODevice::OpenMode mode).
Эквивалентно connectToServer(OpenMode mode). Сокет открывается в заданном режиме openMode к серверу, определенному функцией setServerName().
Обратите внимание, что в отличие от большинства других подклассов QIODevice, open() может не открыть устройство напрямую. Функция возвращает false, если сокет уже был подключен или сервер для подключения не был определен, и true в любом другом случае. Сигналы connected() или error() будут выпущены, как только устройство будет фактически открыто (или подключение не удалось).
См. 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().
void QLocalSocket::setServerName(const QString &name)
Устанавливает имя удалённого узла для подключения. В Windows имя — это имя именованной трубы; в Unix — имя сокета локальной области.
Эта функция должна вызываться, когда сокет не подключен.
Эта функция была добавлена в Qt 5.1.
См. также serverName().
bool QLocalSocket::setSocketDescriptor(qintptr socketDescriptor, QLocalSocket::LocalSocketState socketState = ConnectedState, QIODevice::OpenMode openMode = ReadWrite)
Инициализирует QLocalSocket с помощью дескриптора системного сокета socketDescriptor. Возвращает true , если socketDescriptor принят как допустимый дескриптор сокета; в противном случае возвращает false. Сокет открывается в режиме, указанном openMode, и переходит в состояние сокета, указанное socketState.
Примечание: Невозможно инициализировать два локальных сокета с одинаковым дескриптором системного сокета.
См. также socketDescriptor(), state() и openMode().
qintptr QLocalSocket::socketDescriptor() const
Возвращает дескриптор системного сокета объекта QLocalSocket, если он доступен; в противном случае возвращает -1.
Дескриптор сокета недоступен, когда QLocalSocket находится в состоянии UnconnectedState. Тип дескриптора зависит от платформы:
- В Windows возвращаемое значение — это дескриптор сокета Winsock 2.
- В WinRT и 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-5.14/qlocalsocket.html