将Android BluetoothChat示例应用于单服务器、多客户端

将Android BluetoothChat示例应用于单服务器、多客户端,android,bluetooth,Android,Bluetooth,我试图将SDK附带的BluetoothChat示例改编为单服务器、多客户端配置。我有问题,希望有人能帮我 我创建了两个不同的应用程序,一个服务器和一个客户端,而不是像示例中那样将一个应用程序函数同时作为服务器和客户端。因此,在启动应用程序时,服务器将创建一个蓝牙服务,该服务将创建一个新的AcceptThread,用于侦听传入的连接。我对示例代码做了一些修改,以便AcceptThread继续侦听,即使在第一次连接之后也是如此(示例在一次连接之后停止侦听,因为它只需要在两个设备之间建立连接)。我创建

我试图将SDK附带的BluetoothChat示例改编为单服务器、多客户端配置。我有问题,希望有人能帮我

我创建了两个不同的应用程序,一个服务器和一个客户端,而不是像示例中那样将一个应用程序函数同时作为服务器和客户端。因此,在启动应用程序时,服务器将创建一个蓝牙服务,该服务将创建一个新的AcceptThread,用于侦听传入的连接。我对示例代码做了一些修改,以便AcceptThread继续侦听,即使在第一次连接之后也是如此(示例在一次连接之后停止侦听,因为它只需要在两个设备之间建立连接)。我创建了一个ArrayList来处理多个连接。每次尝试从远程设备进行新连接时,都会创建一个新的ConnectedThread并将其添加到列表中

第一个客户端连接正常

当第二个客户端尝试连接时,连接失败。日志输出为:

D/BluetoothEventLoop(  140): Device property changed: <device address> property: Connected value: true
I/BluetoothService(  140): ACL connected, mAclLinkCount = 2
D/BluetoothEventLoop(  140): Device property changed: <device address> property: Connected value: false
I/BluetoothService(  140): ACL disconnected, mAclLinkCount = 1
D/BluetoothEventLoop(140):设备属性已更改:属性:连接值:true
I/BluetoothService(140):已连接ACL,mAclLinkCount=2
D/BluetoothEventLoop(140):设备属性已更改:属性:连接的值:false
I/BluetoothService(140):ACL已断开连接,mAclLinkCount=1
因此,看起来第二次连接尝试成功,但随后立即断开连接。这看起来像是在低级别上发生的,超出了代码所处理的任何内容。这种情况发生在许多不同类型的测试设备上,因此我认为这不是由于特定的固件或硬件问题造成的

有人能帮忙吗

另外,有人能举一个使用Android蓝牙的服务器->多客户端连接的例子吗?我遇到了一个空中曲棍球的例子:

但是这个项目在我的测试设备上非常容易出错,实际的游戏无法正常显示。有人知道是否有BluetoothChat扩展到处理多个连接的例子吗

更新:

为了解决这个问题,我相信我已经成功地扩展了官方的Android Bluetooth聊天示例,使其能够与连接到多个客户端的服务器一起工作

我已经将我的修改上传到github

一台设备通过选择“菜单>使可发现”充当服务器。然后,每个客户端通过选择“菜单>连接设备”进行连接。我成功地将我的摩托罗拉Droid和HTC Eris作为客户端连接到我的三星Galaxy Tab 10.1”。从客户端发送的每条消息仅显示在服务器上。从服务器发送的消息显示在所有客户端上

这是一个让它工作起来的乏味过程。不过,和HTC设备的连接是零星的。我在其他地方读到HTC上的蓝牙有问题,所以我把它归为这个问题


希望其他人会发现这个示例很有用。如果您有任何问题、建议或其他反馈,请告诉我。

我测试了您的代码。正如您所说,连接HTC作为主控是一个问题。我让三星S3作为主控,HTC作为客户端。它工作正常。但我用索尼爱立信手机再次尝试。没有其他设备可以成功充分地扮演主人的角色。 S3有Blutooth版本4.0,其他版本有更早的版本。你认为问题是因为蓝牙协议栈吗? 我需要在一个定制设备的项目中使用这个概念。试图找出问题是与供应商(HTC、索尼)有关,还是与蓝牙协议栈有关。我不知道如何找到。这没有记录:( 有人面对过这个问题吗