gpt4 book ai didi

android - 不管 UUID 是什么,连接的 BluetoothSocket RFCOMM channel 是否唯一?

转载 作者:太空狗 更新时间:2023-10-29 12:55:32 24 4
gpt4 key购买 nike

基本问题:如果我在 Android 2.2+ 中打开多个蓝牙连接,UUID 在确保所用 RFCOMM channel 的唯一性方面是否重要?

背景:我想创建一个 Android 应用程序,它将驻留在多个 (3+) 不同的 Android 手机(最低 Android 版本 2.2)上。应用程序的每个实例将通过蓝牙相互通信。因此,每个应用程序将同时打开多个蓝牙连接以与所有参与的应用程序对话。

我知道这(至少)是可能的,因为我扩展了 BluetoothChat 示例应用程序以支持 N 个客户端都以聊天室类型的方式一起聊天。所以我有能力同时保持打开多个蓝牙连接。

我担心的是 android 文档中的以下声明:“与 TCP/IP 不同,RFCOMM 一次只允许每个 channel 连接一个客户端,因此在大多数情况下,在接受连接的套接字后立即调用 BluetoothServerSocket 上的 close() 是有意义的。”(http://developer.android.com/guide/topics/wireless/bluetooth.html)

现在,我实现的聊天室风格的 BluetoothChat 应用程序告诉我,我打开同时连接的方法会导致不同 RFCOMM channel 上的连接(否则我会遇到连接失败或串扰)。但是,我不确定我的方法的哪一部分会导致不同的 RFCOMM channel ,这就是这个问题的目的。

我打开多个蓝牙连接的方法分为两部分:1. 我没有使用相同的 BluetoothServerSocket 对象通过一遍又一遍地调用 accept() 来接受多个连接,而是创建了一个线程,为我想要接受的每个连接调用 listenUsingRfcommWithServiceRecord(String, UUID)。2. 我没有为每个连接使用相同的 UUID,而是手动管理了一组 7 个 UUID,这样每个 accept() 都位于使用不同 UUID 创建的 BluetoothServerSocket 上。

现在,我从文档中了解到 listenUsingRfcommWithServiceRecord(String, UUID) 向 SDP 数据库添加了一个条目用于监听。显然,我为每个接受的连接创建不同的 SDP 数据库条目这一事实至少是每个连接使用不同的 RFCOMM 连接的部分原因。但是 UUID 在这里有什么影响吗?如果我在 7 个不同的线程上调用该方法 7 次,所有线程都使用相同的 UUID,它仍然有效吗?或者不同的 UUID 是否会导致使用不同的 RFCOMM channel ?

这里的问题显然是,如果我必须为我的应用程序管理 7 个不同的 UUIDS,那么在连接打开和关闭时确保可用连接 UUIDS 的正确同步可能是一个巨大的麻烦。如果有人可以确认或否认在调用 listenUsingRfcommWithServiceRecord(String, UUID) 时 UUID 对 RFCOMM channel 选择有影响,那将非常有帮助。

(未讨论 - UUID 对连接端的影响,createRfcommSocketToServiceRecord(UUID);我的假设是,如果它适用于传入,它可能适用于传出。)

感谢任何能提供帮助的人。

最佳答案

据我所知,要使用的 channel 由其 GUID 决定。所以多次连接到同一个 channel 会失败。

关于android - 不管 UUID 是什么,连接的 BluetoothSocket RFCOMM channel 是否唯一?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7198487/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com