我如何使用 python 套接字 AF_bluetooth 套接字广播蓝牙查询?

how do i broadcast Bluetooth inquiry with python sockets AF_bluetooth socket?

现在我想了解更多关于蓝牙的知识,我意识到要连接我需要向设备发送一个称为查询数据包的数据包。然而,对于我的脚本,我更感兴趣的是广播它,即使 pybluez 为它提供了高级功能。作为学习经验的一部分,我想用套接字来做。谁能告诉我,如何指定我要发送查询包?像这样通过插座 s = socket.socket(socket.AF_BLUETOOTH, socket.SOCK_STREAM, socket.BTPROTO_RFCOMM) 以及如何广播它,而不是发送到一个地址?

您是要创建串行端口配置文件 (SPP) 套接字服务器吗?

任何例子如下。

我已使用 pydbus 库获取蓝牙适配器地址,但如果您愿意,您可以硬编码 mac 地址:

import socket
import pydbus

bus = pydbus.SystemBus()
adapter = bus.get('org.bluez', '/org/bluez/hci0')

adapter_addr = adapter.Address
port = 3  # Normal port for rfcomm?
buf_size = 1024

s = socket.socket(socket.AF_BLUETOOTH, socket.SOCK_STREAM, socket.BTPROTO_RFCOMM)
s.bind((adapter_addr, port))
s.listen(1)
try:
    print('Listening for connection...')
    client, address = s.accept()
    print(f'Connected to {address}')

    while True:
        data = client.recv(buf_size)
        if data:
            print(data)
except Exception as e:
    print(f'Something went wrong: {e}')
    client.close()
    s.close()