Класс QBluetoothSocket
Класс QBluetoothSocket обеспечивает подключение к устройству Bluetooth, на котором запущен сервер Bluetooth. Подробнее...
| Заголовок: | #include <QBluetoothSocket> |
| qmake: | QT += bluetooth |
| С момента версии: | Qt 5.2 |
| Наследует: | QIODevice |
Открытые типы
| enum | SocketError { UnknownSocketError, NoSocketError, HostNotFoundError, ServiceNotFoundError, ..., OperationError } |
| enum | SocketState { UnconnectedState, ServiceLookupState, ConnectingState, ConnectedState, ..., ListeningState } |
Открытые функции
| QBluetoothSocket(QBluetoothServiceInfo::Protocol socketType, QObject *parent = Q_NULLPTR) | |
| QBluetoothSocket(QObject *parent = Q_NULLPTR) | |
| virtual | ~QBluetoothSocket() |
| void | abort() |
| void | connectToService(const QBluetoothServiceInfo &service, OpenMode openMode = ReadWrite) |
| void | connectToService(const QBluetoothAddress &address, const QBluetoothUuid &uuid, OpenMode openMode = ReadWrite) |
| void | connectToService(const QBluetoothAddress &address, quint16 port, OpenMode openMode = ReadWrite) |
| void | disconnectFromService() |
| 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, SocketState socketState = ConnectedState, OpenMode openMode = ReadWrite) |
| int | socketDescriptor() const |
| QBluetoothServiceInfo::Protocol | socketType() const |
| SocketState | state() const |
Переопределённые открытые функции
| virtual qint64 | bytesAvailable() const |
| virtual qint64 | bytesToWrite() const |
| virtual bool | canReadLine() const |
| virtual void | close() |
| virtual bool | isSequential() const |
Сигналы
| void | connected() |
| void | disconnected() |
| void | error(QBluetoothSocket::SocketError error) |
| void | stateChanged(QBluetoothSocket::SocketState state) |
Защищённые функции
| void | doDeviceDiscovery(const QBluetoothServiceInfo &service, OpenMode openMode) |
| void | setSocketError(SocketError error_) |
| void | setSocketState(SocketState state) |
Переопределённые защищённые функции
| virtual qint64 | readData(char *data, qint64 maxSize) |
| virtual qint64 | writeData(const char *data, qint64 maxSize) |
Дополнительные унаследованные члены
- 1 свойство, унаследованное от QObject
- 1 открытый слот, унаследованный от QObject
- 11 статических открытых членов, унаследованных от QObject
Подробное описание
Класс QBluetoothSocket обеспечивает подключение к устройству Bluetooth, на котором запущен сервер Bluetooth.
QBluetoothSocket поддерживает два типа сокетов: L2CAP и RFCOMM.
L2CAP — это низкоуровневый сокет Bluetooth, ориентированный на дейтаграммы. Android не поддерживает L2CAP для сокетных подключений.
RFCOMM — это надёжный сокет, ориентированный на поток. Сокеты RFCOMM эмулируют последовательный порт RS-232.
Для создания подключения к службе Bluetooth создайте сокет соответствующего типа и вызовите connectToService(), передав адрес и номер порта Bluetooth. QBluetoothSocket отправит сигнал connected(), когда соединение будет установлено.
Если Protocol не поддерживается на платформе, вызов connectToService() отправит ошибку UnsupportedProtocolError.
END_OF_DOCUMENT_MARKERПримечание: QBluetoothSocket не поддерживает синхронные операции чтения и записи. Функции, такие как waitForReadyRead() и waitForBytesWritten() не реализованы. Операции ввода-вывода должны выполняться с помощью readyRead(), read() и write().
Документация по типам членов
enum QBluetoothSocket::SocketError
Этот перечисление описывает типы ошибок сокета Bluetooth.
| Константа | Значение | Описание |
|---|---|---|
QBluetoothSocket::UnknownSocketError |
QAbstractSocket::UnknownSocketError |
Произошла неизвестная ошибка. |
QBluetoothSocket::NoSocketError |
-2 |
Ошибка отсутствует. Используется для тестирования. |
QBluetoothSocket::HostNotFoundError |
QAbstractSocket::HostNotFoundError |
Не удалось найти удалённый хост. |
QBluetoothSocket::ServiceNotFoundError |
QAbstractSocket::SocketAddressNotAvailableError |
Не удалось найти UUID службы на удалённом хосте. |
QBluetoothSocket::NetworkError |
QAbstractSocket::NetworkError |
Попытка чтения или записи из сокета вернула ошибку |
QBluetoothSocket::UnsupportedProtocolError |
8 |
Протокол Protocol не поддерживается на этой платформе. |
QBluetoothSocket::OperationError |
QAbstractSocket::OperationError |
Попытка операции была предпринята, когда сокет находился в состоянии, не допускающем её. |
enum QBluetoothSocket::SocketState
Этот перечисление описывает состояние сокета Bluetooth.
| Константа | Значение | Описание |
|---|---|---|
QBluetoothSocket::UnconnectedState |
QAbstractSocket::UnconnectedState |
Сокет не подключён. |
QBluetoothSocket::ServiceLookupState |
QAbstractSocket::HostLookupState |
Сокет запрашивает параметры подключения. |
QBluetoothSocket::ConnectingState |
QAbstractSocket::ConnectingState |
Сокет пытается подключиться к устройству. |
QBluetoothSocket::ConnectedState |
QAbstractSocket::ConnectedState |
Сокет подключён к устройству. |
QBluetoothSocket::BoundState |
QAbstractSocket::BoundState |
Сокет привязан к локальному адресу и порту. |
QBluetoothSocket::ClosingState |
QAbstractSocket::ClosingState |
Сокет подключён и будет закрыт после записи всех ожидаемых данных в сокет. |
QBluetoothSocket::ListeningState |
QAbstractSocket::ListeningState |
Сокет прослушивает входящие подключения. |
Документация по функциям-членам
QBluetoothSocket::QBluetoothSocket(QBluetoothServiceInfo::Protocol socketType, QObject *parent = Q_NULLPTR)
Конструирует сокет Bluetooth типа socketType с parent.
QBluetoothSocket::QBluetoothSocket(QObject *parent = Q_NULLPTR)
Конструирует сокет Bluetooth с parent.
[virtual] QBluetoothSocket::~QBluetoothSocket()
Уничтожает сокет Bluetooth.
void QBluetoothSocket::abort()
Прерывает текущее подключение и сбрасывает сокет. В отличие от disconnectFromService(), эта функция немедленно закрывает сокет, отбрасывая любые ожидаемые данные в буфере записи.
Примечание: В Android, прерывание сокета требует асинхронного взаимодействия с потоками Android. Поэтому связанные сигналы disconnected() и stateChanged() отложены до завершения работы потоков.
См. также disconnectFromService() и close().
[virtual] qint64 QBluetoothSocket::bytesAvailable() const
Переопределено из QIODevice::bytesAvailable().
Возвращает количество входящих байтов, ожидающих чтения.
См. также bytesToWrite() и read().
[virtual] qint64 QBluetoothSocket::bytesToWrite() const
Переопределено из QIODevice::bytesToWrite().
Возвращает количество байтов, ожидающих записи. Байты записываются, когда управление возвращается в цикл событий.
[virtual] bool QBluetoothSocket::canReadLine() const
Переопределено из QIODevice::canReadLine().
Возвращает true, если можно прочитать по крайней мере одну строку из устройства
[virtual] void QBluetoothSocket::close()
Переопределено из QIODevice::close().
Отключает подключение сокета к устройству.
Примечание: В Android, закрытие сокета требует асинхронного взаимодействия с потоками Android. Поэтому связанные сигналы disconnected() и stateChanged() отложены до завершения работы потоков.
void QBluetoothSocket::connectToService(const QBluetoothServiceInfo &service, OpenMode openMode = ReadWrite)
Пытается подключиться к службе, описанной в service.
Сокет открывается в заданном openMode. socketType() может измениться в зависимости от протокола, требуемого службой service.
Сокет сначала переходит в состояние ConnectingState и пытается подключиться к устройству, предоставляющему service. Если подключение установлено, QBluetoothSocket переходит в состояние ConnectedState и испускает connected().
В любой момент сокет может испустить error() для сигнализации об ошибке.
Обратите внимание, что большинство платформ требуют сопряжения перед подключением к удалённому устройству. В противном случае процесс подключения может завершиться ошибкой.
См. также state() и disconnectFromService().
void QBluetoothSocket::connectToService(const QBluetoothAddress &address, const QBluetoothUuid &uuid, 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, OpenMode openMode = ReadWrite)
Пытается установить соединение с address на заданном port.
Сокет открывается в заданном openMode.
Сокет сначала переходит в состояние ConnectingState и пытается подключиться к address. Если подключение установлено, QBluetoothSocket переходит в состояние ConnectedState и испускает connected().
В любой момент сокет может испустить error() для сигнализации об ошибке.
END_OF_DOCUMENT_MARKERВ Android подключение к сервису не может быть установлено с использованием порта. Вызов этой функции выведет ServiceNotFoundError.
Обратите внимание, что большинство платформ требуют сопряжения перед подключением к удаленному устройству. В противном случае процесс подключения может завершиться неудачей.
См. также state() и disconnectFromService().
[signal] void QBluetoothSocket::connected()
Этот сигнал генерируется при установлении соединения.
См. также QBluetoothSocket::ConnectedState и stateChanged().
void QBluetoothSocket::disconnectFromService()
Попытка закрыть сокет. Если ожидаются данные для записи, QBluetoothSocket перейдет в состояние ClosingState и будет ждать, пока все данные не будут записаны. В конечном итоге он перейдет в состояние UnconnectedState и сгенерирует сигнал disconnected().
См. также connectToService().
[signal] void QBluetoothSocket::disconnected()
Этот сигнал генерируется при отключении сокета.
См. также QBluetoothSocket::UnconnectedState и stateChanged().
[protected] void QBluetoothSocket::doDeviceDiscovery(const QBluetoothServiceInfo &service, OpenMode openMode)
Начать обнаружение устройства для service и открыть сокет с openMode. Если сокет создан с адресом устройства uuid сервиса, используйте обнаружение сервиса для поиска номера порта для подключения.
SocketError QBluetoothSocket::error() const
Возвращает последнюю ошибку.
[signal] void QBluetoothSocket::error(QBluetoothSocket::SocketError error)
Этот сигнал генерируется при возникновении ошибки error.
Примечание: Сигнал error перегружен в этом классе. Для подключения к нему с помощью синтаксиса указателя на функцию необходимо указать тип сигнала в статическом приведении, как показано в этом примере:
connect(bluetoothSocket, static_cast<void(QBluetoothSocket::*)(QBluetoothSocket::SocketError)>(&QBluetoothSocket::error),
[=](QBluetoothSocket::SocketError error){ /* ... */ }); См. также error().
QString QBluetoothSocket::errorString() const
Возвращает текстовую строку для отображения ошибки.
[virtual] bool QBluetoothSocket::isSequential() const
Переопределено из QIODevice::isSequential().
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 эта функция не поддерживается.
QBluetooth::SecurityFlags QBluetoothSocket::preferredSecurityFlags() const
Возвращает параметры безопасности, используемые для первой попытки подключения.
Параметры безопасности могут быть пересмотрены между двумя сторонами во время или после установления соединения. Если такие изменения произошли, они не отражаются в значении этого флага.
В macOS этот флаг всегда устанавливается в QBluetooth::Secure.
Эта функция была добавлена в Qt 5.6.
См. также setPreferredSecurityFlags().
[virtual protected] qint64 QBluetoothSocket::readData(char *data, qint64 maxSize)
Переопределено из QIODevice::readData().
void QBluetoothSocket::setPreferredSecurityFlags(QBluetooth::SecurityFlags flags)
Устанавливает предпочтительные параметры безопасности для попытки подключения в flags. Это значение включается при вызове connectToService(). Поэтому для изменения этого параметра для существующего соединения требуется повторное подключение.
В Bluez этот параметр по умолчанию установлен в QBluetooth::Authorization.
В macOS это значение игнорируется, так как платформа не допускает доступа к параметрам безопасности сокета. Тем не менее, платформа по умолчанию предпочитает безопасные/зашифрованные соединения, и поэтому эта функция всегда возвращает QBluetooth::Secure.
Android поддерживает только два уровня безопасности (безопасный и небезопасный). Если этот флаг установлен в QBluetooth::NoSecurity, объект сокета не будет использовать проверку подлинности или шифрование. Любая другая комбинация флагов безопасности запустит безопасное соединение Bluetooth. По умолчанию этот флаг установлен в QBluetooth::Secure.
Примечание: Безопасное соединение требует сопряжения между двумя устройствами. На некоторых платформах сопряжение автоматически инициируется во время установления соединения. На других платформах приложение должно вручную инициировать сопряжение перед попыткой подключения.
Эта функция была добавлена в Qt 5.6.
См. также preferredSecurityFlags().
bool QBluetoothSocket::setSocketDescriptor(int socketDescriptor, QBluetoothServiceInfo::Protocol socketType, SocketState socketState = ConnectedState, OpenMode openMode = ReadWrite)
Устанавливает сокет для использования socketDescriptor с типом socketType, который находится в состоянии socketState и режиме openMode.
Возвращает true при успехе
См. также socketDescriptor().
[protected] void QBluetoothSocket::setSocketError(SocketError error_)
Устанавливает тип последней ошибки в error_.
[protected] void QBluetoothSocket::setSocketState(SocketState state)
Устанавливает состояние сокета в state.
int QBluetoothSocket::socketDescriptor() const
Возвращает дескриптор сокета, специфичный для платформы, если он доступен. Эта функция возвращает -1, если дескриптор недоступен или произошла ошибка.
См. также setSocketDescriptor().
QBluetoothServiceInfo::Protocol QBluetoothSocket::socketType() const
Возвращает тип сокета. Сокет автоматически адаптируется к протоколу, предлагаемому удаленным сервисом.
Android поддерживает только сокеты на основе RFCOMM.
SocketState QBluetoothSocket::state() const
Возвращает текущее состояние сокета.
[signal] void QBluetoothSocket::stateChanged(QBluetoothSocket::SocketState state)
Этот сигнал генерируется при изменении состояния сокета на state.
См. также connected(), disconnected(), state() и QBluetoothSocket::SocketState.
[virtual protected] qint64 QBluetoothSocket::writeData(const char *data, qint64 maxSize)
Переопределено из QIODevice::writeData().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/archives/qt-5.6/qbluetoothsocket.html