- class QBluetoothSocket#
类
QBluetoothSocket
允许连接到运行蓝牙服务器的蓝牙设备。 更多…摘要#
方法#
def
__init__()
def
abort()
定义
error()
定义
localName()
定义
localPort()
定义
peerName()
定义
peerPort()
定义
socketType()
定义
state()
信号#
定义
connected()
def
stateChanged()
注意
本文档可能包含从 C++ 自动翻译到 Python 的代码片段。我们始终欢迎为片段翻译做出贡献。如果您发现翻译有问题,您也可以通过在 https:/bugreports.qt.io/projects/PYSIDE 创建工单的方式来告诉我们。
详细描述#
QBluetoothSocket
支持两种套接字类型,L2CAP
和RFCOMM
.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
操作系统请求权限,但用户未授权。
使用
parent
构造蓝牙套接字。使用
parent
构造类型为socketType
的蓝牙套接字。- abort()#
终止当前连接并重置套接字。与
disconnectFromService()
不同,此函数立即关闭套接字,丢弃任何写入缓冲区中的挂起数据。注意
在 Android 上,终止套接字需要与 Android 线程的异步交互。因此,相关的
disconnected()
和stateChanged()
信号会被延迟,直到线程完成关闭。另请参阅
disconnectFromService()
close()
- connectToService(address, uuid[, mode=QIODeviceBase.OpenModeFlag.ReadWrite])#
- 参数
address –
QBluetoothAddress
uuid –
ServiceClassUuid
mode –
OpenModeFlag
的组合
- connectToService(address, uuid[, openMode=QIODeviceBase.OpenModeFlag.ReadWrite])
- 参数
address –
QBluetoothAddress
uuid –
QBluetoothUuid
openMode –
OpenModeFlag
的组合
尝试连接到由
uuid
指定的服务,该服务位于地址为address
的设备上。套接字在给定的
openMode
下打开。对于BlueZ,套接字首先进入
服务查找状态
,并查询uuid
的连接参数。如果成功检索到服务参数,套接字会进入连接状态
,并尝试连接到地址
。如果建立了连接,QBluetoothSocket
将进入已连接状态
并触发connected()
。在Android上,可以直接使用远程服务的UUID建立服务连接。因此,该平台不需要
服务查找状态
,并且socketType()
始终设置为Rfcomm协议。在任何时候,套接字都可以触发
errorOccurred()
来指示发生了错误。请注意,大多数平台在连接到远程设备之前都需要配对。否则,连接过程可能会失败。
- connectToService(address, port[, openMode=QIODeviceBase.OpenModeFlag.ReadWrite])
- 参数
address –
QBluetoothAddress
端口 – int
openMode –
OpenModeFlag
的组合
尝试在指定的
端口
上与地址
建立连接。套接字在给定的
openMode
下打开。套接字首先进入
连接状态
,并尝试连接到地址
。如果建立了连接,QBluetoothSocket
将进入已连接状态
并触发connected()
。在任何时候,套接字都可以触发
errorOccurred()
来指示发生了错误。在Android和BlueZ(版本5.46或更高版本)上,无法使用端口建立到服务的连接。调用此函数将触发
ServiceNotFoundError
异常。请注意,大多数平台在连接到远程设备之前都需要配对。否则,连接过程可能会失败。
- connectToService(service[, openMode=QIODeviceBase.OpenModeFlag.ReadWrite])
- 参数
service –
QBluetoothServiceInfo
openMode –
OpenModeFlag
的组合
尝试连接到由
service
描述的服务。套接字将使用指定的
openMode
打开。如果service
指定不同的socketProtocol()
,则忽略socketType()
。套接字首先进入
ConnectingState
,并尝试连接到提供service
的设备。如果建立连接,则QBluetoothSocket
进入ConnectedState
并触发connected()
信号。在任何时候,套接字都可以触发
errorOccurred()
来指示发生了错误。请注意,大多数平台在连接到远程设备之前都需要配对。否则,连接过程可能会失败。
在Android上,只能使用RFCOMM连接。此函数忽略任何套接字协议指示符,并假定使用RFCOMM。
- connected()#
在建立连接时发出这个信号。
- disconnectFromService()#
尝试关闭套接字。如果有待写入的数据,
QBluetoothSocket
将进入ClosingState
等待所有数据已写入。最终,它将进入UnconnectedState
并触发disconnected()
信号。另请参阅
- disconnected()#
当套接字断开连接时发出此信号。
- doDeviceDiscovery(service, openMode)#
- 参数
service –
QBluetoothServiceInfo
openMode –
OpenModeFlag
的组合
开始对
service
进行设备发现,并使用openMode
打开套接字。如果套接字使用服务uuid设备地址创建,请使用服务发现来查找连接的端口号。- error()#
- 返回类型:
返回最后一个错误。
- errorOccurred(error)#
- 参数
错误 –
SocketError
当发生
error
时发出此信号。另请参阅
- localAddress()#
- 返回类型:
返回本地设备的地址。
尽管一些平台可能不同,但套接字通常必须连接以确保返回有效的地址。特别是,当处理支持多个本地蓝牙适配器的平台时,这一点尤为正确。
- localName()#
- 返回类型:
str
返回本地设备的名称。
尽管一些平台可能不同,但套接字通常必须连接以确保返回有效的名称。特别是,当处理支持多个本地蓝牙适配器的平台时,这一点尤为正确。
- localPort()#
- 返回类型:
int
如果有可用的本地套接字端口号,则返回该端口号;否则返回0。尽管一些平台可能不同,但套接字通常必须连接以确保返回有效的端口号。
在Android和macOS上,此功能不受支持,返回0。
- peerAddress()#
- 返回类型:
返回对等设备的地址。
- peerName()#
- 返回类型:
str
返回对等设备的名称。
- peerPort()#
- 返回类型:
int
如果可用,则返回对等套接字的端口号,否则返回0。在Android上,此功能不受支持。
返回用于初始连接尝试的安全参数。
安全参数可能会在连接建立后或建立期间由双方重新协商。如果发生此类更改,则不会反映在此标志的值中。
在macOS上,此标志始终设置为 安全。
将连接尝试的首选安全参数设置为
flags
。在调用connectToService()
时此值被包含,因此需要重新连接以更改现有连接的此参数。在Bluez中,此属性默认设置为 授权。
在macOS上,此值被忽略,因为平台不允许访问套接字的安全参数。默认情况下,平台更喜欢安全/加密连接,因此此函数始终返回 安全。
Android只支持两个安全级别(安全和不安全)。如果此标志设置为 无安全,则套接字对象将不会采用任何身份验证或加密。任何其他安全标志组合将触发一个安全的蓝牙连接。默认情况下,此标志设置为 安全。
- setSocketDescriptor(socketDescriptor, socketType[, socketState=QBluetoothSocket.SocketState.ConnectedState[, openMode=QIODeviceBase.OpenModeFlag.ReadWrite]])#
- 参数
socketDescriptor – int
socketType –
Protocol
socketState –
SocketState
openMode –
OpenModeFlag
的组合
- 返回类型:
bool
将套接字设置为使用类型为
socketType
的socketDescriptor
,该套接字处于socketState
状态,并以openMode
模式打开。套接字描述符由
QBluetoothSocket
实例拥有,完成后可以关闭。成功时返回
true
。另请参阅
- setSocketError(error)#
- 参数
错误 –
SocketError
将上次发生的错误类型设置为
error_
。- setSocketState(state)#
- 参数
state –
SocketState
将套接字状态设置为
state
。- socketDescriptor()#
- 返回类型:
int
如果可用,返回特定平台的套接字描述符。如果描述符不可用或发生错误,此函数返回 -1。
返回套接字类型。套接字会自动调整以匹配远程服务的协议。
仅 Android 支持基于
RFCOMM
的套接字。- state()#
- 返回类型:
返回套接字的当前状态。
- stateChanged(state)#
- 参数
state –
SocketState
当套接字状态变为
state
时,发出此信号。