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

Linux下蓝牙socket调用connect()返回"no route to host"的原因?

问题排查与解决

一、蓝牙Socket connect()返回错误113(No route to host)的解决步骤

  • 核心错误排查:确认连接地址正确性
    你提到“使用hciconfig -a获取的本地蓝牙MAC地址调用connect()”——客户端要连接的是服务端设备的蓝牙MAC地址,而非本地MAC。如果填成自己的MAC,必然出现路由不可达错误,先检查代码中sockaddr_rc结构体的bdaddr字段是否为服务端的正确MAC。

  • 确保服务端蓝牙处于可发现状态
    RFCOMM连接需要服务端设备能被客户端搜索到,执行以下命令开启可发现:

    bluetoothctl discoverable on
    # 旧系统可使用hciconfig
    hciconfig hci0 piscan
    
  • 检查设备配对与信任状态
    未配对的设备无法建立socket连接,在客户端设备上执行:

    bluetoothctl pair <服务端MAC>
    bluetoothctl trust <服务端MAC>
    

    配对完成后重试连接。

  • 验证服务端端口/通道可用性
    检查服务端使用的RFCOMM通道是否被占用,执行:

    sdptool browse local
    

    若目标通道已被其他服务注册,修改服务端代码中的通道号(建议选择1-30之间的未被占用值)。

  • 权限与防火墙排查

    • 尝试用root权限运行客户端和服务端程序,普通用户可能缺少蓝牙socket操作权限;
    • 临时关闭防火墙测试:sudo ufw disable,若关闭后正常,需添加蓝牙流量的放行规则;
    • 给程序添加网络权限:sudo setcap cap_net_raw+ep ./your_c_program。
  • 确认服务端绑定配置
    服务端代码中需确保绑定的是正确的蓝牙接口(如hci0)或BDADDR_ANY,避免绑定到错误的不可用接口。

二、VirtualBox Ubuntu使用蓝牙时Windows丢失蓝牙选项的解决方法

  • 调整VirtualBox蓝牙设备接管设置
    VirtualBox启用蓝牙设备直通后,会将设备从Windows主机接管至虚拟机,导致Windows暂时丢失蓝牙:

    • 在虚拟机运行时,点击顶部菜单栏设备 -> USB,取消勾选蓝牙设备,让Windows重新接管;
    • 在VirtualBox设置中,进入USB选项卡,将蓝牙设备的连接方式设为“仅在虚拟机请求时连接”,避免自动接管。
  • 安装/更新VirtualBox扩展包
    蓝牙设备直通需要VirtualBox扩展包支持,确保安装了与当前VirtualBox版本匹配的扩展包。

  • 重启Windows蓝牙服务
    若Windows丢失蓝牙选项,按下Win+R输入services.msc,找到“Bluetooth Support Service”,右键选择“重启”,通常可恢复蓝牙设备显示。

  • 调整虚拟机USB控制器版本
    在VirtualBox设置USB选项卡中,选择USB 3.0 (xHCI)控制器,多数蓝牙适配器为USB 3.0规格,旧控制器可能导致兼容性问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 05:02:30