class QBluetoothSocket#

QBluetoothSocket 允许连接到运行蓝牙服务器的蓝牙设备。 更多

Inheritance diagram of PySide6.QtBluetooth.QBluetoothSocket

摘要#

方法#

信号#

注意

本文档可能包含从 C++ 自动翻译到 Python 的代码片段。我们始终欢迎为片段翻译做出贡献。如果您发现翻译有问题,您也可以通过在 https:/bugreports.qt.io/projects/PYSIDE 创建工单的方式来告诉我们。

详细描述#

QBluetoothSocket 支持两种套接字类型,L2CAPRFCOMM .

L2CAP 是一种低级的数据报套接字。Android 不支持 L2CAP 套接字连接。

RFCOMM 是一种可靠的、面向流的套接字。RFCOMM 套接字模拟一个串行端口。

为连接到蓝牙服务,创建适当的套接字类型并调用 connectToService() 函数,传入蓝牙地址和端口号。QBluetoothSocket 将在连接建立时发出 connected() 信号。

如果平台不支持 Protocol,调用 connectToService() 将发出 UnsupportedProtocolError 错误。

注意

QBluetoothSocket 不支持同步的读写操作。waitForReadyRead() 和 waitForBytesWritten() 等函数未实现。应该使用 readyRead()、read() 和 write() 来执行 I/O 操作。

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

注意

在 macOS Monterey (12) 上,当正在执行模态对话框或进入事件跟踪模式(例如,通过长按窗口关闭按钮)时,会暂停套接字数据流。这个功能可能会在未来的 macOS 版本中发生变化。

class SocketState#

此枚举描述了蓝牙套接字的状态。

常量

描述

QBluetoothSocket.SocketState.UnconnectedState

套接字未连接。

QBluetoothSocket.SocketState.ServiceLookupState

套接字正在查询连接参数。

QBluetoothSocket.SocketState.ConnectingState

套接字正在尝试连接到设备。

QBluetoothSocket.SocketState.ConnectedState

套接字连接到设备。

QBluetoothSocket.SocketState.BoundState

套接字绑定到本地地址和端口。

QBluetoothSocket.SocketState.ClosingState

套接字已连接,并且将在所有挂起数据写入套接字后关闭。

QBluetoothSocket.SocketState.ListeningState

套接字正在监听传入连接。

class SocketError#

此枚举描述了蓝牙套接字错误类型。

常量

描述

QBluetoothSocket.SocketError.UnknownSocketError

发生了未知错误。

QBluetoothSocket.SocketError.NoSocketError

无错误。用于测试。

QBluetoothSocket.SocketError.HostNotFoundError

找不到远程主机。

QBluetoothSocket.SocketError.ServiceNotFoundError

在远程主机上找不到服务 UUID。

QBluetoothSocket.SocketError.NetworkError

从套接字读取或写入操作返回了错误

QBluetoothSocket.SocketError_UNSUPPORTEDProtocolError

Protocol在该平台上不受支持。

QBluetoothSocket.SocketError.OperationError

尝试在套接字处于不允许该操作的状态时执行操作。

QBluetoothSocket.SocketError.RemoteHostClosedError

远程主机关闭了连接。

QBluetoothSocket.SocketError.MissingPermissionsError

操作系统请求权限,但用户未授权。

__init__([parent=None])#
参数

parentQObject

使用 parent 构造蓝牙套接字。

__init__(socketType[, parent=None])
参数

使用 parent 构造类型为 socketType 的蓝牙套接字。

abort()#

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

注意

在 Android 上,终止套接字需要与 Android 线程的异步交互。因此,相关的 disconnected()stateChanged() 信号会被延迟,直到线程完成关闭。

另请参阅

disconnectFromService() close()

connectToService(address, uuid[, mode=QIODeviceBase.OpenModeFlag.ReadWrite])#
参数
connectToService(address, uuid[, openMode=QIODeviceBase.OpenModeFlag.ReadWrite])
参数

尝试连接到由 uuid 指定的服务,该服务位于地址为 address 的设备上。

套接字在给定的 openMode 下打开。

对于BlueZ,套接字首先进入服务查找状态,并查询uuid的连接参数。如果成功检索到服务参数,套接字会进入 连接状态,并尝试连接到地址。如果建立了连接,QBluetoothSocket将进入已连接状态并触发connected()

在Android上,可以直接使用远程服务的UUID建立服务连接。因此,该平台不需要服务查找状态,并且socketType()始终设置为Rfcomm协议

在任何时候,套接字都可以触发errorOccurred()来指示发生了错误。

请注意,大多数平台在连接到远程设备之前都需要配对。否则,连接过程可能会失败。

connectToService(address, port[, openMode=QIODeviceBase.OpenModeFlag.ReadWrite])
参数

尝试在指定的端口上与地址建立连接。

套接字在给定的 openMode 下打开。

套接字首先进入连接状态,并尝试连接到地址。如果建立了连接,QBluetoothSocket将进入已连接状态并触发connected()

在任何时候,套接字都可以触发errorOccurred()来指示发生了错误。

在Android和BlueZ(版本5.46或更高版本)上,无法使用端口建立到服务的连接。调用此函数将触发ServiceNotFoundError 异常。

请注意,大多数平台在连接到远程设备之前都需要配对。否则,连接过程可能会失败。

connectToService(service[, openMode=QIODeviceBase.OpenModeFlag.ReadWrite])
参数

尝试连接到由 service 描述的服务。

套接字将使用指定的 openMode 打开。如果 service 指定不同的 socketProtocol(),则忽略 socketType()

套接字首先进入 ConnectingState,并尝试连接到提供 service 的设备。如果建立连接,则 QBluetoothSocket 进入 ConnectedState 并触发 connected() 信号。

在任何时候,套接字都可以触发errorOccurred()来指示发生了错误。

请注意,大多数平台在连接到远程设备之前都需要配对。否则,连接过程可能会失败。

在Android上,只能使用RFCOMM连接。此函数忽略任何套接字协议指示符,并假定使用RFCOMM。

connected()#

在建立连接时发出这个信号。

disconnectFromService()#

尝试关闭套接字。如果有待写入的数据,QBluetoothSocket 将进入 ClosingState 等待所有数据已写入。最终,它将进入 UnconnectedState 并触发 disconnected() 信号。

另请参阅

connectToService()

disconnected()#

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

doDeviceDiscovery(service, openMode)#
参数

开始对 service 进行设备发现,并使用 openMode 打开套接字。如果套接字使用服务uuid设备地址创建,请使用服务发现来查找连接的端口号。

error()#
返回类型:

SocketError

返回最后一个错误。

errorOccurred(error)#
参数

错误SocketError

当发生 error 时发出此信号。

另请参阅

error()

localAddress()#
返回类型:

QBluetoothAddress

返回本地设备的地址。

尽管一些平台可能不同,但套接字通常必须连接以确保返回有效的地址。特别是,当处理支持多个本地蓝牙适配器的平台时,这一点尤为正确。

localName()#
返回类型:

str

返回本地设备的名称。

尽管一些平台可能不同,但套接字通常必须连接以确保返回有效的名称。特别是,当处理支持多个本地蓝牙适配器的平台时,这一点尤为正确。

localPort()#
返回类型:

int

如果有可用的本地套接字端口号,则返回该端口号;否则返回0。尽管一些平台可能不同,但套接字通常必须连接以确保返回有效的端口号。

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

peerAddress()#
返回类型:

QBluetoothAddress

返回对等设备的地址。

peerName()#
返回类型:

str

返回对等设备的名称。

peerPort()#
返回类型:

int

如果可用,则返回对等套接字的端口号,否则返回0。在Android上,此功能不受支持。

preferredSecurityFlags()#
返回类型:

组合 安全

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

安全参数可能会在连接建立后或建立期间由双方重新协商。如果发生此类更改,则不会反映在此标志的值中。

在macOS上,此标志始终设置为 安全

setPreferredSecurityFlags(flags)#
参数

flags – 组合 安全

将连接尝试的首选安全参数设置为 flags。在调用 connectToService() 时此值被包含,因此需要重新连接以更改现有连接的此参数。

在Bluez中,此属性默认设置为 授权

在macOS上,此值被忽略,因为平台不允许访问套接字的安全参数。默认情况下,平台更喜欢安全/加密连接,因此此函数始终返回 安全

Android只支持两个安全级别(安全和不安全)。如果此标志设置为 无安全,则套接字对象将不会采用任何身份验证或加密。任何其他安全标志组合将触发一个安全的蓝牙连接。默认情况下,此标志设置为 安全

注意

安全连接需要两个设备之间的配对。在某些平台上,配对将在连接建立期间自动启动。在其他平台上,需要在尝试连接之前手动触发配对。

setSocketDescriptor(socketDescriptor, socketType[, socketState=QBluetoothSocket.SocketState.ConnectedState[, openMode=QIODeviceBase.OpenModeFlag.ReadWrite]])#
参数
返回类型:

bool

将套接字设置为使用类型为 socketTypesocketDescriptor,该套接字处于 socketState 状态,并以 openMode 模式打开。

套接字描述符由 QBluetoothSocket 实例拥有,完成后可以关闭。

成功时返回 true

另请参阅

socketDescriptor()

setSocketError(error)#
参数

错误SocketError

将上次发生的错误类型设置为 error_

setSocketState(state)#
参数

stateSocketState

将套接字状态设置为 state

socketDescriptor()#
返回类型:

int

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

另请参阅

setSocketDescriptor()

socketType()#
返回类型:

协议

返回套接字类型。套接字会自动调整以匹配远程服务的协议。

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

state()#
返回类型:

SocketState

返回套接字的当前状态。

stateChanged(state)#
参数

stateSocketState

当套接字状态变为 state 时,发出此信号。