QBluetoothServer 类

QBluetoothServer 类使用 RFCOMM 或 L2cap 协议与蓝牙设备通信。更多...

头文件 #include <QBluetoothServer>
qmakeQT += bluetooth
继承 QObject

公共类型

枚举Error { NoError, UnknownError, PoweredOffError, InputOutputError, ServiceAlreadyRegisteredError, …, MissingPermissionsError }

公共函数

QBluetoothServer(QBluetoothServiceInfo::Protocol serverType, QObject *parent = nullptr)
虚拟~QBluetoothServer()
voidclose()
QBluetoothServer::Errorerror() const
boolhasPendingConnections() const
boolisListening() const
boollisten(const QBluetoothAddress &address = QBluetoothAddress(), quint16 port = 0)
QBluetoothServiceInfolisten(const QBluetoothUuid &uuid, const QString &serviceName = QString())
intmaxPendingConnections() const
QBluetoothSocket *nextPendingConnection()
QBluetooth::SecurityFlagssecurityFlags() const
QBluetoothAddressserverAddress() const
quint16serverPort() const
QBluetoothServiceInfo::ProtocolserverType() const
voidsetMaxPendingConnections(int numConnections)
voidsetSecurityFlags(QBluetooth::SecurityFlags security)

信号

(since 6.2) voiderrorOccurred(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。

另请参阅QBluetoothServiceInfoQBluetoothSocket

成员类型文档

enum QBluetoothServer::Error

此枚举描述了蓝牙服务器错误类型。

常数描述
QBluetoothServer::NoError0没有错误。
QBluetoothServer::UnknownError1发生了未知错误。
QBluetoothServer::PoweredOffError2蓝牙适配器未开启电源。
QBluetoothServer::InputOutputError3发生了输入输出错误。
QBluetoothServer::ServiceAlreadyRegisteredError4服务或端口已被注册。
QBluetoothServer::UnsupportedProtocolError5此平台不支持 Protocol
QBluetoothServer::MissingPermissionsError (since Qt 6.4)6操作系统请求的用户未授权的权限。

成员函数文档

[explicit] QBluetoothServer::QBluetoothServer(QBluetoothServiceInfo::Protocol serverType, QObject *parent = nullptr)

parentserverType 构建蓝牙服务器。

[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())

此为注册带有 uuidserviceName 的 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。如果待处理的套接字数量超过此限制,则将拒绝创建新的套接字。

另请参阅maxPendingConnections

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.以及/或其他国家和地区的商标。所有其他商标均为其各自所有者的财产。