Spec-Zone.ru › Qt

Класс QBluetoothSocket

Класс QBluetoothSocket позволяет подключаться к устройству Bluetooth, на котором запущен сервер Bluetooth. Подробнее...

Заголовок: #include <QBluetoothSocket>
qmake: QT += bluetooth
С тех пор: Qt 5.2
Наследует: QIODevice
  • Список всех членов, включая унаследованные

Открытые типы

Перечисление SocketError { UnknownSocketError, NoSocketError, HostNotFoundError, ServiceNotFoundError, NetworkError, …, RemoteHostClosedError }
Перечисление SocketState { UnconnectedState, ServiceLookupState, ConnectingState, ConnectedState, BoundState, …, ListeningState }

Открытые функции

QBluetoothSocket(QObject *parent = nullptr)
QBluetoothSocket(QBluetoothServiceInfo::Protocol socketType, QObject *parent = nullptr)
virtual ~QBluetoothSocket()
void abort()
void connectToService(const QBluetoothServiceInfo &service, QIODeviceBase::OpenMode openMode = ReadWrite)
void connectToService(const QBluetoothAddress &address, const QBluetoothUuid &uuid, QIODeviceBase::OpenMode openMode = ReadWrite)
void connectToService(const QBluetoothAddress &address, quint16 port, QIODeviceBase::OpenMode openMode = ReadWrite)
void disconnectFromService()
QBluetoothSocket::SocketError error() const
QString errorString() const
QBluetoothAddress localAddress() const
QString localName() const
quint16 localPort() const
QBluetoothAddress peerAddress() const
QString peerName() const
quint16 peerPort() const
QBluetooth::SecurityFlags preferredSecurityFlags() const
void setPreferredSecurityFlags(QBluetooth::SecurityFlags flags)
bool setSocketDescriptor(int socketDescriptor, QBluetoothServiceInfo::Protocol socketType, QBluetoothSocket::SocketState socketState = SocketState::ConnectedState, QIODeviceBase::OpenMode openMode = ReadWrite)
int socketDescriptor() const
QBluetoothServiceInfo::Protocol socketType() const
QBluetoothSocket::SocketState state() const

Переопределённые открытые функции

virtual qint64 bytesAvailable() const override
virtual qint64 bytesToWrite() const override
virtual bool canReadLine() const override
virtual void close() override
virtual bool isSequential() const override

Сигналы

void connected()
void disconnected()
void errorOccurred(QBluetoothSocket::SocketError error)
void stateChanged(QBluetoothSocket::SocketState state)

Защищённые функции

void doDeviceDiscovery(const QBluetoothServiceInfo &service, QIODeviceBase::OpenMode openMode)
void setSocketError(QBluetoothSocket::SocketError error_)
void setSocketState(QBluetoothSocket::SocketState state)

Реализованные защищённые функции

virtual qint64 readData(char *data, qint64 maxSize) override
virtual qint64 writeData(const char *data, qint64 maxSize) override

Подробное описание

QBluetoothSocket поддерживает два типа сокетов, L2CAP и RFCOMM.

L2CAP — это сокет Bluetooth низкого уровня, ориентированный на дейтаграммы. Android не поддерживает L2CAP для соединений сокетов.

RFCOMM — это надёжный сокет, ориентированный на потоки. Сокеты RFCOMM эмулируют последовательный порт RS-232.

Для создания соединения с Bluetooth-сервисом создайте сокет соответствующего типа и вызовите connectToService() с указанием Bluetooth-адреса и номера порта. QBluetoothSocket будет излучать сигнал connected(), когда соединение будет установлено.

Если Protocol не поддерживается на платформе, вызов connectToService() вызовет ошибку UnsupportedProtocolError.

Примечание: QBluetoothSocket не поддерживает синхронные операции чтения и записи. Функции, такие как waitForReadyRead() и waitForBytesWritten() не реализованы. Операции ввода-вывода должны выполняться с помощью readyRead(), read() и write().

На iOS этот класс нельзя использовать, так как платформа не предоставляет API, который может разрешить доступ к функциям, связанным с QBluetoothSocket.

Документация типов членов

Перечисление QBluetoothSocket::SocketError

Это перечисление описывает типы ошибок сокетов Bluetooth.

Константа Значение Описание
QBluetoothSocket::SocketError::UnknownSocketError 1 Произошла неизвестная ошибка.
QBluetoothSocket::SocketError::NoSocketError 0 Ошибка отсутствует. Используется для тестирования.
QBluetoothSocket::SocketError::HostNotFoundError 3 Не удалось найти удалённый хост.
QBluetoothSocket::SocketError::ServiceNotFoundError 4 Не удалось найти UUID службы на удалённом хосте.
QBluetoothSocket::SocketError::NetworkError 5 Попытка чтения или записи из сокета вернула ошибку.
QBluetoothSocket::SocketError::UnsupportedProtocolError 6 Протокол Protocol не поддерживается на этой платформе.
QBluetoothSocket::SocketError::OperationError 7 Операция была предпринята, когда сокет находился в состоянии, не допускающем её выполнения.
QBluetoothSocket::SocketError::RemoteHostClosedError 2 Удалённый хост закрыл соединение. Это значение было добавлено в Qt 5.10.

Перечисление QBluetoothSocket::SocketState

Это перечисление описывает состояние сокета Bluetooth.

Константа Значение Описание
QBluetoothSocket::SocketState::UnconnectedState 0 Сокет не подключён.
QBluetoothSocket::SocketState::ServiceLookupState 1 Сокет запрашивает параметры соединения.
QBluetoothSocket::SocketState::ConnectingState 2 Сокет пытается подключиться к устройству.
QBluetoothSocket::SocketState::ConnectedState 3 Сокет подключён к устройству.
QBluetoothSocket::SocketState::BoundState 4 Сокет привязан к локальному адресу и порту.
QBluetoothSocket::SocketState::ClosingState 5 Сокет подключён и будет закрыт, после записи всех ожидающих данных в сокет.
QBluetoothSocket::SocketState::ListeningState 6 Сокет прослушивает входящие подключения.

Документация по функциям-членам

QBluetoothSocket::QBluetoothSocket(QObject *parent = nullptr)

Создаёт сокет Bluetooth с parent.

QBluetoothSocket::QBluetoothSocket(QBluetoothServiceInfo::Protocol socketType, QObject *parent = nullptr)

Создаёт сокет Bluetooth типа socketType с parent.

[signal] void QBluetoothSocket::connected()

Этот сигнал генерируется при установлении соединения.

См. также QBluetoothSocket::SocketState::ConnectedState и stateChanged().

[signal] void QBluetoothSocket::disconnected()

Этот сигнал генерируется при отключении сокета.

См. также QBluetoothSocket::SocketState::UnconnectedState и stateChanged().

[signal, since 6.2] void QBluetoothSocket::errorOccurred(QBluetoothSocket::SocketError error)

Этот сигнал генерируется при возникновении ошибки error.

Эта функция была добавлена в Qt 6.2.

См. также error().

[signal] void QBluetoothSocket::stateChanged(QBluetoothSocket::SocketState state)

Этот сигнал генерируется при изменении состояния сокета на state.

См. также connected(), disconnected(), state() и QBluetoothSocket::SocketState.

[virtual] QBluetoothSocket::~QBluetoothSocket()

Уничтожает сокет Bluetooth.

void QBluetoothSocket::abort()

Прерывает текущее соединение и сбрасывает сокет. В отличие от disconnectFromService(), эта функция немедленно закрывает сокет, отбрасывая любые ожидающие данные в буфере записи.

Примечание: На Android прерывание сокета требует асинхронного взаимодействия с потоками Android. Поэтому связанные сигналы disconnected() и stateChanged() задерживаются до завершения работы потоков.

См. также disconnectFromService() и close().

[override virtual] qint64 QBluetoothSocket::bytesAvailable() const

Переопределяет: QIODevice::bytesAvailable() const.

Возвращает количество входящих байтов, ожидающих чтения.

См. также bytesToWrite() и read().

[override virtual] qint64 QBluetoothSocket::bytesToWrite() const

Переопределяет: QIODevice::bytesToWrite() const.

Возвращает количество байтов, ожидающих записи. Байты записываются при возвращении управления в цикл событий.

[override virtual] bool QBluetoothSocket::canReadLine() const

Переопределяет: QIODevice::canReadLine() const.

Возвращает true, если можно считать как минимум одну строку из устройства

[override virtual] void QBluetoothSocket::close()

Переопределяет: QIODevice::close().

Отключает соединение сокета с устройством.

Примечание: На Android закрытие сокета требует асинхронного взаимодействия с потоками Android. Поэтому связанные сигналы disconnected() и stateChanged() задерживаются до завершения работы потоков.

void QBluetoothSocket::connectToService(const QBluetoothServiceInfo &service, QIODeviceBase::OpenMode openMode = ReadWrite)

Пытается подключиться к службе, описанной в service.

Сокет открывается в заданном openMode. socketType() игнорируется, если service указывает другое значение QBluetoothServiceInfo::socketProtocol.

Сокет сначала переходит в состояние ConnectingState и пытается подключиться к устройству, предоставляющему service. Если соединение установлено, QBluetoothSocket переходит в состояние ConnectedState и генерирует connected().

В любой момент сокет может сгенерировать error() для сигнализации об ошибке.

Обратите внимание, что большинство платформ требуют сопряжения перед подключением к удалённому устройству. В противном случае процесс подключения может завершиться неудачно.

На Android возможны только соединения RFCOMM. Эта функция игнорирует любые указатели протокола сокета и предполагает RFCOMM.

См. также state() и disconnectFromService().

void QBluetoothSocket::connectToService(const QBluetoothAddress &address, const QBluetoothUuid &uuid, QIODeviceBase::OpenMode openMode = ReadWrite)

Пытается установить соединение со службой, идентифицируемой uuid на устройстве с адресом address.

Сокет открывается в заданном openMode.

Для BlueZ сокет сначала переходит в состояние ServiceLookupState и запрашивает параметры соединения для uuid. Если параметры службы успешно получены, сокет переходит в состояние ConnectingState и пытается подключиться к address. Если соединение установлено, QBluetoothSocket переходит в состояние ConnectedState и генерирует connected().

В Android соединение с сервисом можно напрямую установить, используя UUID удалённого сервиса. Поэтому платформа не требует ServiceLookupState и socketType() всегда устанавливается в значение QBluetoothServiceInfo::RfcommProtocol.

В любой момент сокет может излучить error() для сигнализации о возникновении ошибки.

Обратите внимание, что на большинстве платформ требуется сопряжение перед подключением к удалённому устройству. В противном случае процесс подключения может завершиться неудачно.

См. также state() и disconnectFromService().

void QBluetoothSocket::connectToService(const QBluetoothAddress &address, quint16 port, QIODeviceBase::OpenMode openMode = ReadWrite)

Попытка установить соединение с address на указанном port.

Сокет открывается в заданном openMode.

Сокет сначала переходит в состояние ConnectingState и пытается подключиться к address. Если подключение установлено, QBluetoothSocket переходит в состояние ConnectedState и излучает connected().

В любой момент сокет может излучить error() для сигнализации о возникновении ошибки.

В Android и BlueZ (версия 5.46 и выше) подключение к сервису не может быть установлено с использованием порта. Вызов этой функции приведет к излучению ServiceNotFoundError.

Обратите внимание, что на большинстве платформ требуется сопряжение перед подключением к удалённому устройству. В противном случае процесс подключения может завершиться неудачно.

См. также state() и disconnectFromService().

void QBluetoothSocket::disconnectFromService()

Попытка закрыть сокет. Если ожидаются данные, которые необходимо записать, QBluetoothSocket перейдёт в состояние ClosingState и подождёт, пока все данные не будут записаны. В конечном итоге, он перейдёт в состояние UnconnectedState и излучит сигнал disconnected().

См. также connectToService().

[protected] void QBluetoothSocket::doDeviceDiscovery(const QBluetoothServiceInfo &service, QIODeviceBase::OpenMode openMode)

Запуск обнаружения устройств для service и открытие сокета с openMode. Если сокет создан с UUID сервиса и адресом устройства, используйте обнаружение сервисов для поиска номера порта для подключения.

QBluetoothSocket::SocketError QBluetoothSocket::error() const

Возвращает последнюю ошибку.

QString QBluetoothSocket::errorString() const

Возвращает удобочитаемую строку текста для ошибки.

[override virtual] bool QBluetoothSocket::isSequential() const

Реализует: QIODevice::isSequential() const.

QBluetoothAddress QBluetoothSocket::localAddress() const

Возвращает адрес локального устройства.

Хотя некоторые платформы могут отличаться, сокет должен быть подключён, чтобы гарантировать возврат действительного адреса. Особенно это верно при работе с платформами, которые поддерживают несколько локальных адаптеров Bluetooth.

QString QBluetoothSocket::localName() const

Возвращает имя локального устройства.

Хотя некоторые платформы могут отличаться, сокет должен быть подключён, чтобы гарантировать возврат действительного имени. Особенно это верно при работе с платформами, которые поддерживают несколько локальных адаптеров Bluetooth.

quint16 QBluetoothSocket::localPort() const

Возвращает номер порта локального сокета, если он доступен, в противном случае возвращает 0. Хотя некоторые платформы могут отличаться, сокет должен быть подключён, чтобы гарантировать возврат действительного номера порта.

В Android и macOS эта функция не поддерживается и возвращает 0.

QBluetoothAddress QBluetoothSocket::peerAddress() const

Возвращает адрес устройства-партнёра.

QString QBluetoothSocket::peerName() const

Возвращает имя устройства-партнёра.

quint16 QBluetoothSocket::peerPort() const

Возвращает номер порта сокета-партнёра, если он доступен, в противном случае возвращает 0. В Android эта функция не поддерживается.

[since 5.6] QBluetooth::SecurityFlags QBluetoothSocket::preferredSecurityFlags() const

Возвращает параметры безопасности, используемые для первоначальной попытки подключения.

Параметры безопасности могут быть пересмотрены между двумя сторонами во время или после установления соединения. Если такие изменения происходят, они не отражаются в значении этого флага.

В macOS этот флаг всегда устанавливается в значение QBluetooth::Security::Secure.

Эта функция была добавлена в Qt 5.6.

См. также setPreferredSecurityFlags().

[override virtual protected] qint64 QBluetoothSocket::readData(char *data, qint64 maxSize)

Реализует: QIODevice::readData(char *data, qint64 maxSize).

[since 5.6] void QBluetoothSocket::setPreferredSecurityFlags(QBluetooth::SecurityFlags flags)

Устанавливает предпочтительные параметры безопасности для попытки подключения в flags. Это значение включается при вызове connectToService(). Поэтому для изменения этого параметра для существующего соединения требуется переподключение.

В Bluez этот параметр по умолчанию устанавливается в QBluetooth::Security::Authorization.

В macOS это значение игнорируется, так как платформа не позволяет получить доступ к параметрам безопасности сокета. Тем не менее, платформа по умолчанию предпочитает защищённые/шифрованные соединения, поэтому эта функция всегда возвращает QBluetooth::Security::Secure.

Android поддерживает только два уровня безопасности (защищённый и незащищённый). Если этот флаг установлен в QBluetooth::Security::NoSecurity, объект сокета не будет использовать никакой аутентификации или шифрования. Любая другая комбинация флагов безопасности вызовет защищённое соединение Bluetooth. По умолчанию этот флаг устанавливается в QBluetooth::Security::Secure.

Примечание: Защищённое соединение требует сопряжения между двумя устройствами. На некоторых платформах сопряжение автоматически инициируется во время установления соединения. Другие платформы требуют, чтобы приложение вручную инициировало сопряжение перед попыткой подключения.

Эта функция была добавлена в Qt 5.6.

См. также preferredSecurityFlags().

bool QBluetoothSocket::setSocketDescriptor(int socketDescriptor, QBluetoothServiceInfo::Protocol socketType, QBluetoothSocket::SocketState socketState = SocketState::ConnectedState, QIODeviceBase::OpenMode openMode = ReadWrite)

Установите сокет для использования socketDescriptor с типом socketType, который находится в состоянии socketState и режиме openMode.

Возвращает true при успехе

См. также socketDescriptor().

[protected] void QBluetoothSocket::setSocketError(QBluetoothSocket::SocketError error_)

Устанавливает тип последней ошибки на error_.

[protected] void QBluetoothSocket::setSocketState(QBluetoothSocket::SocketState state)

Устанавливает состояние сокета в state.

int QBluetoothSocket::socketDescriptor() const

Возвращает дескриптор сокета, специфичный для платформы, если он доступен. Эта функция возвращает -1, если дескриптор недоступен или произошла ошибка.

См. также setSocketDescriptor().

QBluetoothServiceInfo::Protocol QBluetoothSocket::socketType() const

Возвращает тип сокета. Сокет автоматически подстраивается под протокол, предлагаемый удалённым сервисом.

Android поддерживает только сокеты на основе RFCOMM.

QBluetoothSocket::SocketState QBluetoothSocket::state() const

Возвращает текущее состояние сокета.

[override virtual protected] qint64 QBluetoothSocket::writeData(const char *data, qint64 maxSize)

Переопределяет: 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/qbluetoothsocket.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API