You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用socket.AF_BLUETOOTH实现蓝牙通信遇WinError 10051问题求助

蓝牙Socket连接失败问题排查

问题说明

使用Python的socket库结合蓝牙功能实现两台设备间消息收发,服务端运行后能正常打印listening,但客户端无法建立连接,抛出以下错误:

C:\Users\DELL\PycharmProjects\bluetooth>python client.py
Traceback (most recent call last):
  File "C:\Users\DELL\PycharmProjects\bluetooth\client.py", line 6, in <module>
    connection.connect(("b8:08:cf:3c:7a:c2", 4))
OSError: [WinError 10051] A socket operation was attempted to an unreachable network

已确认蓝牙处于开启、可被发现状态,怀疑MAC地址有误,但设备管理器中仅有一个设备带有“高级”选项。


相关代码

服务端代码

import socket

bmac = "b8:08:cf:3c:7a:c2"

server = socket.socket(socket.AF_BLUETOOTH, socket.SOCK_STREAM, socket.BTPROTO_RFCOMM)
server.bind((bmac, 4))
server.listen(1)
print("listening")
connection, addr = server.accept()
print(f"{addr} connected!")

connection.sendall("Hello Bluetooth!".encode())
print(connection.recv(1024))
connection.close()

客户端代码

import socket

bmac = "b8:08:cf:3c:7a:c2"

connection = socket.socket(socket.AF_BLUETOOTH, socket.SOCK_STREAM, socket.BTPROTO_RFCOMM)
connection.connect((bmac, 4))
data = connection.recv(1024)
print(data)
connection.sendall("Hello there!".encode())
connection.close()

可能的原因及解决方案

1. MAC地址错误

你获取的MAC地址可能不是蓝牙适配器的正确地址,可通过以下方式确认:

  • Windows系统:打开命令提示符,执行getmac /v命令,在结果中找到标注为“蓝牙”的适配器对应的物理地址;或者进入蓝牙设置→“更多蓝牙设置”→“硬件”选项卡,选中蓝牙适配器后点击“属性”→“高级”查看。
  • 工具扫描验证:安装pybluez库,运行以下代码扫描附近蓝牙设备,确认目标设备的正确MAC:
    import bluetooth
    
    nearby_devices = bluetooth.discover_devices(lookup_names=True)
    print("Found {} devices.".format(len(nearby_devices)))
    for addr, name in nearby_devices:
        print("  {} - {}".format(addr, name))
    

2. RFCOMM端口问题

  • 端口4可能被系统占用或不允许使用,尝试更换为1-31之间的其他端口(RFCOMM协议的有效端口范围是1-31);
  • 服务端可绑定到0号端口让系统自动分配可用端口,再通过socket.getsockname()获取实际端口,客户端使用该端口连接:
    服务端修改部分:
    server.bind((bmac, 0))
    print(f"Listening on port {server.getsockname()[1]}")
    

3. 设备未配对或权限不足

  • 先手动在系统蓝牙设置中完成两台设备的配对,再运行代码;
  • 确保Python程序拥有蓝牙访问权限,Windows系统可在“隐私和安全性”→“蓝牙”中检查是否允许应用访问蓝牙。

4. 原生socket库对Windows蓝牙支持有限

Python原生socket的AF_BLUETOOTH在Windows平台的兼容性不如专用蓝牙库,建议使用pybluez库实现蓝牙通信,该库对Windows的蓝牙协议支持更完善。

5. 防火墙或安全软件拦截

  • 临时关闭Windows防火墙或第三方安全软件,测试连接是否正常;
  • 若正常,可在防火墙中添加Python程序的蓝牙连接放行规则。

内容的提问来源于stack exchange,提问作者user19154852

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 00:43:22