我正在做蓝牙套接字编程,我对 BlueZ 提供的套接字几乎没有疑问。
当我们处理 TCP/IP 套接字编程时,我们通常可以选择 TCP 或 UDP 作为我们的传输协议。据我所知,这两种协议是互斥的(我们只能选择其中一种)。
但是,我发现 BlueZ 为我们提供了 L2CAP 和 RFCOMM 套接字。例如,在 中pybluez
,我们可以选择bluetooth.L2CAP
或bluetooth.RFCOMM
作为参数来构造一个套接字。
import bluetooth
server_sock = bluetooth.BluetoothSocket( bluetooth.RFCOMM ) # or bluetooth.L2CAP
我的问题是:在蓝牙堆栈中是否执行不同的功能和不同的级别L2CAP
?RFCOMM
换句话说,我想它们都是缺一不可的,那我们怎么可能只选择其中一个作为协议来构造套接字呢?
我是不是误会了什么?还是只是代码中指定的socket只是决定了socket在蓝牙栈中的入口位置,L2CAP和RFCOMM都还在工作?如果是这样,为什么 BlueZ 会为我们提供两个不同的套接字条目?
我已经阅读了这里的介绍:https ://people.csail.mit.edu/albert/bluez-intro/x95.html ,我知道指定 L2CAP 或 RFCOMM,我们可以有不同的设置,比如数量港口。但我仍然无法获得使用哪些协议以及它们存在的原因。
我是蓝牙新手,非常感谢您的帮助!谢谢!