Linux Bluez RFCOMM:连接被拒绝

Linux Bluez RFCOMM:连接被拒绝,linux,bluetooth,raspberry-pi3,bluez,rfcomm,Linux,Bluetooth,Raspberry Pi3,Bluez,Rfcomm,在Linux/Bluez上,通过RFCOMM与蓝牙设备的连接失败,在调用时连接被拒绝 connect(s,(struct sockaddr*)&addr,sizeof(addr))。 该设备已成功配对。可以成功建立从Android或Windows到该设备的RFCOMM连接,因此问题似乎出现在Bluez diver和/或Blueototothd上 对于Linux/Bluez,bluetoothctl和Wireshark跟踪显示它首先连接,然后在大约2秒钟后断开连接。断开连接的原因尚不清楚 同样的问

在Linux/Bluez上,通过RFCOMM与蓝牙设备的连接失败,在调用时连接被拒绝
connect(s,(struct sockaddr*)&addr,sizeof(addr))。
该设备已成功配对。可以成功建立从Android或Windows到该设备的RFCOMM连接,因此问题似乎出现在Bluez diver和/或Blueototothd上

对于Linux/Bluez,bluetoothctl和Wireshark跟踪显示它首先连接,然后在大约2秒钟后断开连接。断开连接的原因尚不清楚

同样的问题也发生在不同的Linux版本上,在带有USB蓝牙(Linux ubuntu 4.15.0-33-generic#36~16.04.1-ubuntu SMP Wed Aug 15 17:21:05 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux)或Raspberry Pi 3(Jessie,Stretch)的PC上

我已经检查了许多其他具有相同/类似问题的线程。大多数人没有或没有明确的答案

显示2.2秒后的断开

相应的Bluetooth系统日志输出:

Aug 31 16:43:54 ubuntu bluetoothd[926]: src/adapter.c:connected_callback() hci0 device F6:65:0A:E5:DE:E1 connected eir_len 22
Aug 31 16:43:54 ubuntu bluetoothd[926]: src/device.c:device_create() dst F6:65:0A:E5:DE:E1
Aug 31 16:43:54 ubuntu bluetoothd[926]: src/device.c:device_new() address F6:65:0A:E5:DE:E1
Aug 31 16:43:55 ubuntu bluetoothd[926]: src/device.c:device_new() Creating device /org/bluez/hci0/dev_F6_65_0A_E5_DE_E1
Aug 31 16:43:57 ubuntu bluetoothd[926]: src/adapter.c:dev_disconnected() Device F6:65:0A:E5:DE:E1 disconnected, reason 3
Aug 31 16:43:57 ubuntu bluetoothd[926]: src/adapter.c:adapter_remove_connection()
Aug 31 16:43:57 ubuntu bluetoothd[926]: src/adapter.c:adapter_remove_connection() Removing temporary device /org/bluez/hci0/dev_F6_65_0A_E5_DE_E1
Aug 31 16:43:57 ubuntu bluetoothd[926]: src/device.c:device_remove() Removing device /org/bluez/hci0/dev_F6_65_0A_E5_DE_E1
Aug 31 16:43:57 ubuntu bluetoothd[926]: src/device.c:btd_device_unref() Freeing device /org/bluez/hci0/dev_F6_65_0A_E5_DE_E1
Aug 31 16:43:57 ubuntu bluetoothd[926]: src/device.c:device_free() 0x563aa2a270a0
Aug 31 16:43:57 ubuntu bluetoothd[926]: plugins/policy.c:disconnect_cb() reason 3
Aug 31 16:43:57 ubuntu bluetoothd[926]: src/adapter.c:bonding_attempt_complete() hci0 bdaddr F6:65:0A:E5:DE:E1 type 0 status 0xe
Aug 31 16:43:57 ubuntu bluetoothd[926]: src/adapter.c:resume_discovery()
reason 3
管理内核源代码的include/net/bluetooth/MGMT.h中的远程设备。这意味着是设备启动断开连接。但是Wireshark跟踪中突出显示的线表明是主机启动了断开连接


非常感谢您的帮助。

使用了错误的RFCOMM通道。当使用正确的RFCOMM通道时,它立即工作

sdptool记录F6:65:0A:E5:DE:E1
显示RFCOMM在哪个通道上:

Service Name: Serial Port
Service RecHandle: 0x10000
Service Class ID List:
  "Serial Port" (0x1101)
Protocol Descriptor List:
  "L2CAP" (0x0100)
  "RFCOMM" (0x0003)
    Channel: 5

当bluez没有设备所需的所有必需配置文件时,通常会发生这种情况。我不确定基于libbluetooth的操作,但您仍然可以尝试使用“ConnectProfile”方法连接到特定的配置文件,请参见此处:默认情况下,“connect”将尝试解析并连接设备支持的所有配置文件。无法连接所有配置文件将退出连接并使设备处于配对状态。感谢您的提示。设置配置文件可能会自动选择正确的RFCOMM通道。但对我来说,如何设置个人资料似乎并不明显。