我如何使用 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()
现在我想了解更多关于蓝牙的知识,我意识到要连接我需要向设备发送一个称为查询数据包的数据包。然而,对于我的脚本,我更感兴趣的是广播它,即使 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()