首页 文章

Linux Bluez RFCOMM:拒绝连接

提问于
浏览
2

在Linux / Bluez上通过RFCOMM与蓝牙设备的连接失败,并且在 connect(s, (struct sockaddr *)&addr, sizeof(addr)); 的调用下拒绝连接 . 该设备已成功配对 . 可以成功 Build 从Android或Windows到该设备的RFCOMM连接,因此问题似乎位于Bluez潜水员和/或蓝天 .

使用Linux / Bluez,bluetoothctl和Wireshark跟踪显示它会连接,然后在大约2秒后断开连接 . 断开的原因尚不清楚 .

在具有USB蓝牙的PC上,不同的Linux版本也会出现同样的问题(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) .

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

Wireshark trace screenshot在2.2秒后显示断开连接 .

相应的蓝牙系统日志输出:

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 points到内核源的include / net / bluetooth / mgmt.h中的MGMT_DEV_DISCONN_REMOTE . 这意味着启动断开连接的设备 . 但Wireshark跟踪中突出显示的行显示它是启动断开连接的主机 .

非常感谢您提前提供任何帮助 .

1 回答

  • 0

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

    sdptool records F6:65:0A:E5:DE:E1 显示RFCOMM在哪个 Channels :

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

相关问题