QBluetoothServer 类
QBluetoothServer 类使用 RFCOMM 或 L2cap 协议与蓝牙设备通信。更多...
头文件 | #include <QBluetoothServer> |
qmake | QT += bluetooth |
继承 | QObject |
公共类型
枚举 | Error { NoError, UnknownError, PoweredOffError, InputOutputError, ServiceAlreadyRegisteredError, …, MissingPermissionsError } |
公共函数
QBluetoothServer(QBluetoothServiceInfo::Protocol serverType, QObject *parent = nullptr) | |
虚拟 | ~QBluetoothServer() |
void | close() |
QBluetoothServer::Error | error() const |
bool | hasPendingConnections() const |
bool | isListening() const |
bool | listen(const QBluetoothAddress &address = QBluetoothAddress(), quint16 port = 0) |
QBluetoothServiceInfo | listen(const QBluetoothUuid &uuid, const QString &serviceName = QString()) |
int | maxPendingConnections() const |
QBluetoothSocket * | nextPendingConnection() |
QBluetooth::SecurityFlags | securityFlags() const |
QBluetoothAddress | serverAddress() const |
quint16 | serverPort() const |
QBluetoothServiceInfo::Protocol | serverType() const |
void | setMaxPendingConnections(int numConnections) |
void | setSecurityFlags(QBluetooth::SecurityFlags security) |
信号
(since 6.2) void | errorOccurred(QBluetoothServer::Error error) |
void | 新的连接() |
详细描述
QBluetoothServer 用于通过 RFCOMM 或 L2cap 实现蓝牙服务。
使用 listen() 开始监听传入的连接。等待当有新的连接建立时,newConnection() 信号被触发,然后调用 nextPendingConnection() 来获取新连接的 QBluetoothSocket。
要使其他设备找到您的服务,创建一个具有适用于您的服务的属性的 QBluetoothServiceInfo,并使用 QBluetoothServiceInfo::registerService() 进行注册。调用 serverPort() 获取正在使用的通道号。
如果平台不支持 QBluetoothServiceInfo::Protocol,则 listen() 将返回 false
。例如,Android 和 WinRT 仅支持 RFCOMM。
在 iOS 上,无法使用此类,因为平台未公开允许访问 QBluetoothServer 相关特征的 API。
另请参阅QBluetoothServiceInfo 和 QBluetoothSocket。
成员类型文档
enum QBluetoothServer::Error
此枚举描述了蓝牙服务器错误类型。
常数 | 值 | 描述 |
---|---|---|
QBluetoothServer::NoError | 0 | 没有错误。 |
QBluetoothServer::UnknownError | 1 | 发生了未知错误。 |
QBluetoothServer::PoweredOffError | 2 | 蓝牙适配器未开启电源。 |
QBluetoothServer::InputOutputError | 3 | 发生了输入输出错误。 |
QBluetoothServer::ServiceAlreadyRegisteredError | 4 | 服务或端口已被注册。 |
QBluetoothServer::UnsupportedProtocolError | 5 | 此平台不支持 Protocol。 |
QBluetoothServer::MissingPermissionsError (since Qt 6.4) | 6 | 操作系统请求的用户未授权的权限。 |
成员函数文档
[explicit]
QBluetoothServer::QBluetoothServer(QBluetoothServiceInfo::Protocol serverType, QObject *parent = nullptr)
以 parent 和 serverType 构建蓝牙服务器。
[virtual noexcept]
QBluetoothServer::~QBluetoothServer()
销毁蓝牙服务器。
void QBluetoothServer::close()
关闭并重置监听套接字。任何已经建立的 QBluetoothSocket 继续操作,并必须单独 关闭。
QBluetoothServer::Error QBluetoothServer::error() const
返回 QBluetoothServer 的最后一个错误。
[signal, since 6.2]
void QBluetoothServer::errorOccurred(QBluetoothServer::Error error)
当发生 error 时发出此信号。
此功能自 Qt 6.2 开始。
另请参阅error() 和 QBluetoothServer::Error。
bool QBluetoothServer::hasPendingConnections() const
如果存在挂起的连接,则返回 true,否则返回 false。
bool QBluetoothServer::isListening() const
如果服务器正在监听传入的连接,则返回 true,否则返回 false。
bool QBluetoothServer::listen(const QBluetoothAddress &address = QBluetoothAddress(), quint16 port = 0)
启动监听连接到 地址 在 端口 上。 地址 必须是本地蓝牙适配器地址,且端口 必须大于零,且未被另一个蓝牙服务器对象占用。建议不要设置端口号,以便系统自动选择端口。
如果操作成功且服务器正在监听连接,则返回 true
,否则返回 false
。
如果服务器对象已正在监听连接,此函数总是返回 false
。在调用此函数之前应调用 close()。
另请参阅 isListening() 和 newConnection()。
QBluetoothServiceInfo QBluetoothServer::listen(const QBluetoothUuid &uuid, const QString &serviceName = QString())
此为注册带有 uuid 和 serviceName 的 SPP 服务的便利函数。因为此函数已注册服务,所以返回的 QBluetoothServiceInfo 对象无法再更改。要稍后关闭服务器,需要在服务器对象上调用 QBluetoothServiceInfo::unregisterService() 和 close()。
如果操作成功则返回已注册的 QBluetoothServiceInfo 实例,否则返回无效的 QBluetoothServiceInfo。此函数始终假定应使用默认蓝牙适配器。
如果服务器对象已正在监听连接,则此函数返回无效的 QBluetoothServiceInfo。
对于 RFCOMM 服务器,此函数与以下代码片段等效。
QBluetoothServiceInfo serviceInfo; serviceInfo.setAttribute(QBluetoothServiceInfo::ServiceName, serviceName); QBluetoothServiceInfo::Sequence browseSequence; browseSequence << QVariant::fromValue(QBluetoothUuid(QBluetoothUuid::ServiceClassUuid::PublicBrowseGroup)); serviceInfo.setAttribute(QBluetoothServiceInfo::BrowseGroupList, browseSequence); QBluetoothServiceInfo::Sequence profileSequence; QBluetoothServiceInfo::Sequence classId; classId << QVariant::fromValue(QBluetoothUuid(QBluetoothUuid::ServiceClassUuid::SerialPort)); classId << QVariant::fromValue(quint16(0x100)); profileSequence.append(QVariant::fromValue(classId)); serviceInfo.setAttribute(QBluetoothServiceInfo::BluetoothProfileDescriptorList, profileSequence); classId.clear(); //Android requires custom uuid to be set as service class classId << QVariant::fromValue(uuid); classId << QVariant::fromValue(QBluetoothUuid(QBluetoothUuid::ServiceClassUuid::SerialPort)); serviceInfo.setAttribute(QBluetoothServiceInfo::ServiceClassIds, classId); serviceInfo.setServiceUuid(uuid); QBluetoothServiceInfo::Sequence protocolDescriptorList; QBluetoothServiceInfo::Sequence protocol; protocol << QVariant::fromValue(QBluetoothUuid(QBluetoothUuid::ProtocolUuid::L2cap)); if (d->serverType == QBluetoothServiceInfo::L2capProtocol) protocol << QVariant::fromValue(serverPort()); protocolDescriptorList.append(QVariant::fromValue(protocol)); protocol.clear(); protocol << QVariant::fromValue(QBluetoothUuid(QBluetoothUuid::ProtocolUuid::Rfcomm)) << QVariant::fromValue(quint8(serverPort())); protocolDescriptorList.append(QVariant::fromValue(protocol)); serviceInfo.setAttribute(QBluetoothServiceInfo::ProtocolDescriptorList, protocolDescriptorList); bool result = serviceInfo.registerService();
另请参阅 isListening()、newConnection() 和 listen。
int QBluetoothServer::maxPendingConnections() const
返回待处理的连接数。
另请参阅 setMaxPendingConnections()。
[信号]
void QBluetoothServer::newConnection()
当有新连接可用时,发出此信号。
连接的槽应该调用 nextPendingConnection() 以获取 QBluetoothSocket 对象,通过连接发送和接收数据。
另请参阅 nextPendingConnection() 和 hasPendingConnections。
QBluetoothSocket *QBluetoothServer::nextPendingConnection()
返回指向下一个待处理连接的 QBluetoothSocket 指针。删除指针的责任在调用者。
QBluetooth::SecurityFlags QBluetoothServer::securityFlags() const
返回蓝牙安全标志。
另请参阅 setSecurityFlags。
QBluetoothAddress QBluetoothServer::serverAddress() const
返回服务器地址。
quint16 QBluetoothServer::serverPort() const
返回服务器端口号。
QBluetoothServiceInfo::Protocol QBluetoothServer::serverType() const
返回QBluetoothServer的类型。
void QBluetoothServer::setMaxPendingConnections(int numConnections)
设置待处理连接的最大数量为numConnections。如果待处理的套接字数量超过此限制,则将拒绝创建新的套接字。
void QBluetoothServer::setSecurityFlags(QBluetooth::SecurityFlags security)
将蓝牙安全标志设置为security。在使用蓝牙2.1设备时,此函数必须在调用listen之前调用,蓝牙连接将始终加密,因为加密是强制性的。
Android仅支持两个级别的安全性(安全和非安全)。如果此标志设置为QBluetooth::Security::NoSecurity,则服务器对象将不采用任何身份验证或加密。任何其他安全标志组合都将触发安全蓝牙连接。
在macOS上,不支持安全标志,并且将被忽略。
另请参阅securityFlags。
© 2024 The Qt Company Ltd. 本文档中的文档贡献是各自所有者的版权。本提供的文档是根据由自由软件基金会发布的GNU自由文档许可协议的条款许可的版本1.3。Qt及其相关标志是芬兰的The Qt Company Ltd.以及/或其他国家和地区的商标。所有其他商标均为其各自所有者的财产。