Класс QBluetoothSocket
Класс QBluetoothSocket позволяет подключиться к устройству Bluetooth, на котором запущен сервер Bluetooth. Подробнее...
| Заголовок: | #include <QBluetoothSocket> |
| qmake: | QT += bluetooth |
| С версии: | Qt 5.2 |
| Наследуется от: | QIODevice |
Открытые типы
| перечисление | SocketError { ОшибкаСокетаНеизвестна, ОшибкаСокетаОтсутствует, ОшибкаХостаНеНайден, ОшибкаСервисаНеНайден, ..., ОшибкаОперации } |
| перечисление | SocketState { СостояниеОтсутствует, СостояниеПоискаСервиса, СостояниеПодключения, СостояниеПодключено, ..., СостояниеПрослушивания } |
Открытые функции
| QBluetoothSocket(QBluetoothServiceInfo::Protocol socketType, QObject *parent = Q_NULLPTR) | |
| QBluetoothSocket(QObject *parent = Q_NULLPTR) | |
| virtual | ~QBluetoothSocket() |
| void | прервать() |
| void | подключитьсяКСервису(const QBluetoothServiceInfo &service, OpenMode openMode = ReadWrite) |
| void | подключитьсяКСервису(const QBluetoothAddress &address, const QBluetoothUuid &uuid, OpenMode openMode = ReadWrite) |
| void | подключитьсяКСервису(const QBluetoothAddress &address, quint16 port, OpenMode openMode = ReadWrite) |
| void | отключитьсяОтСервиса() |
| SocketError | ошибка() const |
| QString | описаниеОшибки() const |
| QBluetoothAddress | локальныйАдрес() const |
| QString | локальноеИмя() const |
| quint16 | локальныйПорт() const |
| QBluetoothAddress | адресСоединения() const |
| QString | имяСоединения() const |
| quint16 | портСоединения() const |
| QBluetooth::SecurityFlags | предпочитаемыеФлагиБезопасности() const |
| void | установитьПредпочитаемыеФлагиБезопасности(QBluetooth::SecurityFlags flags) |
| bool | установитьДескрипторСокета(int socketDescriptor, QBluetoothServiceInfo::Protocol socketType, SocketState socketState = ConnectedState, OpenMode openMode = ReadWrite) |
| int | дескрипторСокета() const |
| QBluetoothServiceInfo::Protocol | типСокета() const |
| SocketState | состояние() const |
Реализованные публичные функции
| virtual qint64 | количествоДоступныхБайтов() const |
| virtual qint64 | количествоБайтовДляЗаписи() const |
| virtual bool | можноПрочитатьСтроку() const |
| virtual void | закрыть() |
| virtual bool | последовательный() const |
- 43 общедоступные функции, унаследованные от QIODevice
- 32 общедоступные функции, унаследованные от QObject
Сигналы
| 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(), когда соединение будет установлено.
Если протокол не поддерживается на платформе, вызов connectToService() отправит ошибку UnsupportedProtocolError.
Примечание: QBluetoothSocket не поддерживает синхронные операции чтения и записи. Функции, такие как waitForReadyRead() и waitForBytesWritten(), не реализованы. Операции ввода-вывода должны выполняться с использованием readyRead(), read() и write().
Документация по типам членов
перечисление 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 переходит в состояние Connected и испускает сигнал 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().
В 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 перегружен в этом классе. Для подключения к этому сигналу с помощью синтаксиса указателя на функцию Qt предоставляет удобную вспомогательную функцию для получения указателя на функцию, как показано в данном примере:
connect(bluetoothSocket, QOverload<QBluetoothSocket::SocketError>::of(&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/qt-5.9/qbluetoothsocket.html