为什么 BlueZ 中有两种不同的套接字选项RFCOMM 和 L2CAP?

问题描述

我在做蓝牙socket编程,对BlueZ提供的socket有一些疑问。

当我们处理 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只是决定了socket在蓝牙栈中的入口位置,L2CAP和RFCOMM都还在运行?如果是这样,为什么 BlueZ 为我们提供两个不同的套接字条目?

我已经阅读了这里的介绍:https://people.csail.mit.edu/albert/bluez-intro/x95.html,我知道通过指定 L2CAP 或 RFCOMM,我们可以有不同的设置,例如端口数。但是我仍然不知道要使用哪些协议以及它们为什么存在。

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

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...