蓝牙:如何使用Bluez创建一个套接字以连接具有特定UUID的服务?

时间:2012-05-31 08:01:49

标签: sockets bluetooth sdp

我正在使用BlueZ库来管理linux下的蓝牙堆栈。我正在尝试打开一个套接字,该套接字应该与已知UUID的特定服务连接。我已成功尝试按照以下示例在服务器和客户端之间打开套接字:

http://people.csail.mit.edu/albert/bluez-intro/c404.html

还描述了如何在远程主机中探索服务;但是,我无法弄清楚的是如何在连接套接字时指定UUID。这在其他环境中非常简单,就像使用Android库时一样;但是,对于BlueZ,我还没有在网上找到例子。

感谢您的帮助!

斯特凡诺

- 在回复中添加了一些细节......不知道是否正确;如果没有,抱歉


感谢您的帮助!

在我的帖子中,我说我想连接一个带有指定UUID的套接字,因为我想到了一个像createRfcommSocketToServiceRecord这样的函数,可以在以下位置找到:

http://developer.android.com/reference/android/bluetooth/BluetoothDevice.html#createRfcommSocketToServiceRecord%28java.util.UUID%29

返回给定某个UUID的套接字。我正在开发两个软件,一个是客户端,另一个是服务器,因此它是我正在创建的服务,而不是标准服务。我在服务器上使用指定的UUID发布此类服务,我想从客户端连接到它。服务器运行正常,因为使用Android平台,利用上面提到的createRfcommSocketToServiceRecord方法,我能够使用正确的服务连接到服务器。

你发布的例子也非常清楚,但不幸的是它是在Python中,而(我忘了指出)我使用Bluez作为C库。我能够利用SDP并检查远程服务器上的服务;但是,在设置套接字的时候,我看不到如何指定端口。我想到了rc_channel,但据我所知,它是蓝牙通道(范围从1到11或类似的东西)。能否指出在客户端创建套接字时我应该能够指定端口的位置?我能在哪里找到sdp正在处理的复杂结构中的正确端口? - 提到:

http://people.csail.mit.edu/albert/bluez-intro/x604.html

再次感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

您没有通过UUID连接套接字。您使用套接字连接到远程设备并浏览其SDP以发现它提供的UUID,并将其映射到套接字端口。以下是使用PyBluez,BlueZ上方的python包装器的这个过程的示例  http://people.csail.mit.edu/albert/bluez-intro/x290.html