QBluetoothSocket

一、描述

QBluetoothSocket 类继承自 QIODevice,用于与运行蓝牙服务器的蓝牙设备建立连接。

QBluetoothSocket 支持两种连接类型,L2CAP RFCOMM

  • L2CAP 是一个低级的面向数据报的蓝牙套接字。Android 不支持 L2CAP。
  • RFCOMM 是一个可靠的、面向流的蓝牙套接字。

要创建到蓝牙服务的连接:

  1. 创建适当类型的套接字
  2. 调用 connectToService() 传递蓝牙地址和端口号。
  3. QBluetoothSocket 将在连接建立时发出 connected() 信号。

QBluetoothSocket 不支持同步读写操作。I/O 操作应该使用 readyRead()、read() 和 write() 来执行。

在 iOS 上,不能使用此类,因为平台没有公开可能允许访问 QBluetoothSocket 相关功能的 API。

二、类型成员

1、enum class QBluetoothSocket::SocketError:此枚举描述蓝牙套接字错误类型。

  • UnknownSocketError:发生未知错误。
  • NoSocketError:没有错误。
  • HostNotFoundError:找不到远程主机。
  • ServiceNotFoundError:在远程主机上找不到服务 UUID。
  • NetworkError:尝试从套接字读取或写入返回错误
  • UnsupportedProtocolError:该平台不支持该协议。
  • OperationError:在套接字处于不允许的状态时尝试操作。
  • RemoteHostClosedError:远程主机关闭了连接。

2、enum class QBluetoothSocket::SocketState:此枚举描述了蓝牙套接字的状态。

  • UnconnectedState:未连接。
  • ServiceLookupState:正在查询连接参数。
  • ConnectingState:正在尝试连接到设备。
  • ConnectedState:已经连接到设备。
  • BoundState:绑定到本地地址和端口。
  • ClosingState:已连接,一旦所有待处理的数据写入套接字就会关闭。
  • ListeningState:正在监听传入的连接。

三、成员函数

1、【信号】void connected()

建立连接时会发出此信号。

2、【信号】void disconnected()

当断开连接时发出此信号。

3、【信号】void errorOccurred(QBluetoothSocket::SocketError error)

发生错误时发出此信号。

4、【信号】void stateChanged(QBluetoothSocket::SocketState state)

当状态更改时发出此信号。

5、void abort()

中止当前连接并重置套接字。与 disconnectFromService() 不同,此函数立即关闭套接字,丢弃写入缓冲区中的任何未决数据。

在 Android 上,中止套接字需要与 Android 线程进行异步交互。因此,相关的 disconnected() 和 stateChanged() 信号被延迟到线程完成关闭才发出。

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

尝试连接到 service 描述的服务。套接字在给定的 openMode 中打开。

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

尝试使用地址 address 与设备上由 uuid 标识的服务建立连接。套接字在给定的 openMode 中打开。

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

尝试与端口 port 上的地址 address 建立连接。套接字在给定的 openMode 中打开。

7、void disconnectFromService()

尝试关闭套接字。

如果有等待写入的未决数据,将进入 ClosingState 并等待直到所有数据都已写入。最终,它将进入 UnconnectedState 并发出 disconnected() 信号。

8、void doDeviceDiscovery(const QBluetoothServiceInfo &service, QIODeviceBase::OpenMode openMode)

为服务 service 启动设备搜索并使用 openMode 打开套接字。如果套接字是使用服务 uuid 设备地址创建的,则使用服务发现来查找要连接的端口号。

9、QBluetoothSocket::SocketError error()

返回最后一个错误。

10、QString errorString()

返回错误的描述文本字符串。

11、QBluetoothAddress localAddress()

本地设备的地址。

12、QString localName()

本地设备的名称。

13、quint16 localPort()

如果可用,则返回本地套接字的端口号,否则返回 0。

在 Android 和 macOS 上,不支持此功能并返回 0。

14、QBluetoothAddress peerAddress()

对面和本地设备连接的设备的地址。

15、QString peerName()

对面和本地设备连接的设备的名称。

16、quint16 peerPort()

如果可用,返回对面和本地设备连接的设备的端口号,否则返回 0。在 Android 上,不支持此功能。

17、QBluetooth::SecurityFlags preferredSecurityFlags()

        void setPreferredSecurityFlags(QBluetooth::SecurityFlags flags)

用于初始连接尝试的安全参数。

18、int socketDescriptor()

如果可用,则返回特定于平台的套接字描述符。如果描述符不可用或发生错误,则返回 -1。

19、QBluetoothServiceInfo::Protocol socketType()

套接字类型。套接字自动适应远程服务提供的协议。

Android 仅支持基于 RFCOMM 的套接字。

20、QBluetoothSocket::SocketState state()

套接字的当前状态。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值