sockets - 为什么 BlueZ 中有两种不同的套接字选项(RFCOMM 和 L2CAP)?
问题描述
我正在做蓝牙套接字编程,我对 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,我们可以有不同的设置,比如数量港口。但我仍然无法获得使用哪些协议以及它们存在的原因。
我是蓝牙新手,非常感谢您的帮助!谢谢!
解决方案
推荐阅读
- python - Python %s 替换一直有效,直到我连接字符串 - 我做错了什么?
- python - 如何在 URL 中发送 # 字符
- java - 没有为 jdbc:sqlserver 找到合适的驱动程序 - 在 Eclipse 中工作,而不是在 JAR 中
- jackson - 使用 Spring WebFlux 在不同端点上的不同 JSON(反)序列化配置
- javascript - 无法在 setTimeout 内设置 innerHTML
- android - 在android中禁用离线时间插入到firebase?
- angular - RxJs 中单次发射元素的订阅版本
- javascript - 为什么 Google Pagespeed Insights 告诉我们,完全相同的 javascript 在移动设备上执行的时间比在桌面设备上执行的时间长 4 倍?
- php - 重构时查询生成器上的未定义属性
- google-cloud-storage - 谷歌云外壳中主目录的共享访问