我正在研究在测试平台中的多个设备之间建立蓝牙Piconet.所有设备都知道该网络的拓扑结构.
测试平台中的设备是Ubuntu台式电脑和Android(Eclair)设备.现在,我正在研究一种以确定的方式在这些设备之间建立主从关系的方法.具体来说,我正在寻找一种方法来建立一个Android设备作为主设备,并与其他7个设备打开多个连接.
我已经看过使用bluez堆栈和NDK的本机实现,但是我的设备上的bluez堆栈实现(Samsung GT 15503)不符合我猜的标准,甚至像hcitool,hciconfig这样的普通应用程序都不起作用.
因此,我尝试使用官方SDK,甚至成功地用我的笔记本电脑建立了一个RFCOMM插座(使用蓝牙聊天示例应用程序作为参考).但我一直在尝试使用相同的BluetoothServerSocket连接两个或更多设备.除非我关闭原始套接字,否则我似乎无法打开新连接.
非常感谢在这方面的任何建议.
我终于弄清楚我做错了什么.显然,无论何时从BluetoothServerSocket调用accept方法并返回套接字,都必须在再次调用accept之前关闭此套接字.
我解决了这个问题,通过创建7个不同的 UUID并使用BluetoothServerSocket监听并接受每个 UUID 的连接来建立我想要的微微网.一旦我获得了特定UUID的连接,我关闭相应的服务器套接字并为下一个UUID重新打开另一个.
以下片段说明了我从BTClickLinkCompete获得的想法.
for (int i = 0; i < 7; i++) {
BluetoothServerSocket myServerSocket = mBtAdapter
.listenUsingRfcommWithServiceRecord(srcApp, mUuid.get(i));
BluetoothSocket myBSock = myServerSocket.accept();
myServerSocket.close(); // Close the socket now that the connection
//has been made
//Do stuff with the socket here, like callback to main thread
}
Run Code Online (Sandbox Code Playgroud)
这里,mUuid是一个存储7种不同uuids的数组.尝试连接到服务器的客户端也将拥有这些uuids,并将按顺序逐个尝试,因为他们不知道已连接到服务器的客户端数量.
| 归档时间: |
|
| 查看次数: |
8121 次 |
| 最近记录: |