PySide6.QtBluetooth.QBluetoothSocket¶
- class QBluetoothSocket¶
QBluetoothSocket类允许连接到运行蓝牙服务器的蓝牙设备。更多…概要¶
方法¶
def
__init__()def
abort()def
error()def
localAddress()def
localName()def
localPort()def
peerAddress()def
peerName()def
peerPort()def
setSocketError()def
setSocketState()def
socketType()def
state()
信号¶
def
connected()def
disconnected()def
errorOccurred()def
stateChanged()
注意
本文档可能包含从C++自动翻译到Python的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译问题,您也可以通过在我们的https:/bugreports.qt.io/projects/PYSIDE上创建工单来告知我们。
详细描述¶
QBluetoothSocket支持两种套接字类型,L2CAP和RFCOMM。L2CAP是一种低级别的面向数据报的蓝牙套接字。Android 不支持L2CAP用于套接字连接。RFCOMM是一种可靠的、面向流的套接字。RFCOMM 套接字模拟 RS-232 串行端口。要创建与蓝牙服务的连接,请创建适当类型的套接字并调用
connectToService(),传递蓝牙地址和端口号。QBluetoothSocket在连接建立时将发出connected()信号。如果平台不支持
Protocol,调用connectToService()将会发出UnsupportedProtocolError错误。注意
QBluetoothSocket不支持同步读写操作。诸如 waitForReadyRead() 和 waitForBytesWritten() 等函数未实现。I/O 操作应使用 readyRead()、read() 和 write() 来执行。在iOS上,由于平台没有暴露允许访问
QBluetoothSocket相关功能的API,因此无法使用此类。注意
在macOS Monterey(12)上,当执行模态对话框或进入事件跟踪模式(例如通过长按窗口关闭按钮)时,套接字数据流会暂停。这可能会在未来的macOS版本中有所改变。
- class SocketState¶
此枚举描述了蓝牙套接字的状态。
常量
描述
QBluetoothSocket.SocketState.UnconnectedState
Socket未连接。
QBluetoothSocket.SocketState.ServiceLookupState
Socket 正在查询连接参数。
QBluetoothSocket.SocketState.ConnectingState
Socket 正在尝试连接到设备。
QBluetoothSocket.SocketState.ConnectedState
Socket已连接到设备。
QBluetoothSocket.SocketState.BoundState
Socket已绑定到本地地址和端口。
QBluetoothSocket.SocketState.ClosingState
Socket已连接,一旦所有待处理的数据写入socket,它将被关闭。
QBluetoothSocket.SocketState.ListeningState
Socket 正在监听传入的连接。
- 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构建一个蓝牙套接字。构建一个类型为
socketType的蓝牙套接字,带有parent。- abort()¶
中止当前连接并重置套接字。与
disconnectFromService()不同,此函数会立即关闭套接字,丢弃写缓冲区中的任何待处理数据。注意
在Android上,中止套接字需要与Android线程进行异步交互。因此,相关的
disconnected()和stateChanged()信号会延迟,直到线程完成关闭操作。另请参阅
disconnectFromService()close()- connectToService(service[, openMode=QIODeviceBase.OpenModeFlag.ReadWrite])¶
- Parameters:
service –
QBluetoothServiceInfoopenMode –
OpenModeFlag的组合
尝试连接到由
service描述的服务。套接字在给定的
openMode中打开。如果service指定了不同的socketProtocol(),则socketType()将被忽略。套接字首先进入
ConnectingState并尝试连接到提供service的设备。如果连接建立,QBluetoothSocket进入ConnectedState并发出connected()。在任何时候,套接字都可以发出
errorOccurred()来表明发生了错误。请注意,大多数平台在连接到远程设备之前需要进行配对。否则,连接过程可能会失败。
在Android上,只能进行RFCOMM连接。此函数忽略任何套接字协议指示符并假定为RFCOMM。
- connectToService(address, uuid[, mode=QIODeviceBase.OpenModeFlag.ReadWrite])
- Parameters:
地址 –
QBluetoothAddressuuid –
ServiceClassUuidmode –
OpenModeFlag的组合
- connectToService(address, uuid[, openMode=QIODeviceBase.OpenModeFlag.ReadWrite])
- Parameters:
地址 –
QBluetoothAddressuuid –
QBluetoothUuidopenMode –
OpenModeFlag的组合
尝试与地址为
address的设备上由uuid标识的服务建立连接。套接字在给定的
openMode中打开。对于BlueZ,套接字首先进入
ServiceLookupState并查询uuid的连接参数。如果成功检索到服务参数,套接字进入ConnectingState,并尝试连接到address。如果连接建立,QBluetoothSocket进入ConnectedState并发出connected()。在Android上,服务连接可以直接使用远程服务的UUID建立。因此,平台不需要
ServiceLookupState,并且socketType()始终设置为RfcommProtocol。在任何时候,套接字都可以发出
errorOccurred()来表明发生了错误。请注意,大多数平台在连接到远程设备之前需要进行配对。否则,连接过程可能会失败。
- connectToService(address, port[, openMode=QIODeviceBase.OpenModeFlag.ReadWrite])
- Parameters:
地址 –
QBluetoothAddressport – int
openMode –
OpenModeFlag的组合
尝试在给定的
port上与address建立连接。套接字在给定的
openMode中打开。套接字首先进入
ConnectingState,并尝试连接到address。如果连接建立成功,QBluetoothSocket将进入ConnectedState并发出connected()。在任何时候,套接字都可以发出
errorOccurred()来表明发生了错误。在Android和BlueZ(版本5.46或以上)上,无法使用端口建立到服务的连接。调用此函数将发出
ServiceNotFoundError。请注意,大多数平台在连接到远程设备之前需要进行配对。否则,连接过程可能会失败。
- connected()¶
当连接建立时,会发出此信号。
- disconnectFromService()¶
尝试关闭套接字。如果有待写入的数据,
QBluetoothSocket将进入ClosingState并等待所有数据写入完成。最终,它将进入UnconnectedState并发出disconnected()信号。另请参阅
- disconnected()¶
当套接字断开连接时,会发出此信号。
- doDeviceDiscovery(service, openMode)¶
- Parameters:
service –
QBluetoothServiceInfoopenMode –
OpenModeFlag的组合
开始设备发现以查找
service并使用openMode打开套接字。如果套接字是使用服务uuid设备地址创建的,则使用服务发现来查找要连接的端口号。- error()¶
- Return type:
返回最后一个错误。
- errorOccurred(error)¶
- Parameters:
错误 –
SocketError
当发生
error时,会发出此信号。另请参阅
- localAddress()¶
- Return type:
返回本地设备的地址。
尽管某些平台可能有所不同,但通常必须连接套接字以保证返回有效地址。特别是在处理支持多个本地蓝牙适配器的平台时,这一点尤为重要。
- localName()¶
- Return type:
字符串
返回本地设备的名称。
尽管某些平台可能有所不同,但通常必须连接socket以保证返回有效的名称。特别是在处理支持多个本地蓝牙适配器的平台时,这一点尤为重要。
- localPort()¶
- Return type:
整数
如果可用,返回本地套接字的端口号,否则返回0。尽管某些平台可能有所不同,但通常必须连接套接字以保证返回有效的端口号。
在Android和macOS上,此功能不受支持并返回0。
- peerAddress()¶
- Return type:
返回对等设备的地址。
- peerName()¶
- Return type:
字符串
返回对等设备的名称。
- peerPort()¶
- Return type:
整数
如果可用,返回对等套接字的端口号,否则返回0。在Android上,此功能不受支持。
返回用于初始连接尝试的安全参数。
安全参数可能在连接建立期间或之后由双方重新协商。如果发生这种变化,它不会反映在此标志的值中。
在macOS上,此标志始终设置为
Secure。设置连接尝试的首选安全参数为
flags。此值在调用connectToService()时被纳入。因此,要更改现有连接的此参数,需要重新连接。在Bluez上,此属性默认设置为
Authorization。在macOS上,此值被忽略,因为该平台不允许访问套接字的安全参数。默认情况下,平台更倾向于安全/加密的连接,因此此函数始终返回
Secure。Android 仅支持两种安全级别(安全和非安全)。如果此标志设置为
NoSecurity,套接字对象将不会使用任何身份验证或加密。任何其他安全标志组合都将触发安全的蓝牙连接。此标志默认设置为Secure。- setSocketDescriptor(socketDescriptor, socketType[, socketState=QBluetoothSocket.SocketState.ConnectedState[, openMode=QIODeviceBase.OpenModeFlag.ReadWrite]])¶
- Parameters:
socketDescriptor – int
socketType –
协议socketState –
SocketStateopenMode –
OpenModeFlag的组合
- Return type:
布尔
设置套接字使用
socketDescriptor,类型为socketType,状态为socketState,模式为openMode。套接字描述符由
QBluetoothSocket实例拥有,一旦完成可能会关闭。成功时返回
true。另请参阅
- setSocketError(error)¶
- Parameters:
错误 –
SocketError
将最后发生的错误类型设置为
error_。- setSocketState(state)¶
- Parameters:
状态 –
SocketState
将套接字状态设置为
state。- socketDescriptor()¶
- Return type:
整数
返回平台特定的套接字描述符(如果可用)。如果描述符不可用或发生错误,此函数返回-1。
返回套接字类型。套接字会自动调整以适应远程服务提供的协议。
Android 仅支持基于
RFCOMM的套接字。- state()¶
- Return type:
返回套接字的当前状态。
- stateChanged(state)¶
- Parameters:
状态 –
SocketState
当套接字状态更改为
state时,会发出此信号。