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

树莓派4向手机发送音频文件时出现BluetoothError[Errno104]问题排查

错误原因与修复方案

错误原因

  • 协议不匹配:你用RFCOMM套接字直接发送裸二进制数据,但代码中指定的端口3对应OBEX对象推送协议(OPP)。OPP要求数据必须遵循OBEX协议规范(包含握手、文件元数据等结构),手机端收到不符合协议的裸字节流后会主动断开连接,触发[Errno 104] Connection reset by peer错误。
  • 缺少协议交互:即使连接成功,没有OBEX协议的文件信息(文件名、大小)交互,手机无法识别接收内容,直接重置连接。

修复方案

1. 使用OBEX协议实现文件传输

Python原生bluetooth库不支持OBEX,需用专门的OBEX工具或库:

方式一:用pyobex库实现(推荐)

先安装依赖:

pip install pyobex

替换后的代码:

from bluetooth import BluetoothSocket, RFCOMM
from pyobex import Client, OBEXError

server_mac = '34:29:12:5E:09:10'
port = 3  # OPP协议端口

# 建立RFCOMM连接
sock = BluetoothSocket(RFCOMM)
try:
    sock.connect((server_mac, port))
    print("已连接到目标设备")
except Exception as e:
    print("连接失败:", e)
    sock.close()
    exit(1)

# 初始化OBEX客户端并发送文件
client = Client(sock)
file_path = 'hallo_welt_mp3.wav'

try:
    client.send_file(file_path)
    print("文件发送成功")
except OBEXError as e:
    print("发送错误:", e)
finally:
    client.close()
    sock.close()

方式二:用系统命令行工具发送

树莓派默认自带bluez工具集,直接用obexftp命令发送:

obexftp -b 34:29:12:5E:09:10 -p hallo_welt_mp3.wav

2. 必要的前置检查

  • 确保手机与树莓派已完成蓝牙配对(配对时需确认PIN码匹配)
  • 手机端开启蓝牙并允许接收文件(部分机型需手动开启“可被发现”或确认接收请求)
  • 检查树莓派蓝牙服务状态:sudo systemctl status bluetooth,确保服务正常运行
  • 验证目标设备的OPP端口:执行sdptool browse 34:29:12:5E:09:10,确认端口3对应OBEX Object Push服务

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 08:03:29