首页 > 解决方案 > 为什么 BlueZ 中有两种不同的套接字选项(RFCOMM 和 L2CAP)?

问题描述

我正在做蓝牙套接字编程,我对 BlueZ 提供的套接字几乎没有疑问。

当我们处理 TCP/IP 套接字编程时,我们通常可以选择 TCP 或 UDP 作为我们的传输协议。据我所知,这两种协议是互斥的(我们只能选择其中一种)。

但是,我发现 BlueZ 为我们提供了 L2CAP 和 RFCOMM 套接字。例如,在 中pybluez,我们可以选择bluetooth.L2CAPbluetooth.RFCOMM作为参数来构造一个套接字。

import bluetooth

server_sock = bluetooth.BluetoothSocket( bluetooth.RFCOMM ) # or bluetooth.L2CAP

我的问题是:在蓝牙堆栈中是否执行不同的功能和不同的级别L2CAPRFCOMM换句话说,我想它们都是缺一不可的,那我们怎么可能只选择其中一个作为协议来构造套接字呢?

我是不是误会了什么?还是只是代码中指定的socket只是决定了socket在蓝牙栈中的入口位置,L2CAP和RFCOMM都还在工作?如果是这样,为什么 BlueZ 会为我们提供两个不同的套接字条目?

我已经阅读了这里的介绍:https ://people.csail.mit.edu/albert/bluez-intro/x95.html ,我知道指定 L2CAP 或 RFCOMM,我们可以有不同的设置,比如数量港口。但我仍然无法获得使用哪些协议以及它们存在的原因。

我是蓝牙新手,非常感谢您的帮助!谢谢!

标签: socketsbluetoothrfcommpybluezl2cap

解决方案


推荐阅读