Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bluetooth 蓝牙协议(RFCOMM、L2CAP和ACL)_Bluetooth_Android Bluetooth_Rfcomm_L2cap - Fatal编程技术网

Bluetooth 蓝牙协议(RFCOMM、L2CAP和ACL)

Bluetooth 蓝牙协议(RFCOMM、L2CAP和ACL),bluetooth,android-bluetooth,rfcomm,l2cap,Bluetooth,Android Bluetooth,Rfcomm,L2cap,从我从Bluetooth Essentials for Programmer中读到的内容来看,这本书提到了一些我不太理解的要点 RFCOMM是一种可靠的基于流的协议。 L2CAP是一种基于数据包的协议,可以配置不同级别的可靠性 L2CAP实际上是RFCOMM的传输协议,因此每个RFCOMM连接实际上都封装在L2CAP连接中。 这让我很困惑,因为这两个协议是不同类型的协议(一个是基于流的,另一个是基于包的)。根据它的解释,我有以下几个问题 既然RFCOMM连接是封装的,那么串行端口配置文件(SPP

从我从Bluetooth Essentials for Programmer中读到的内容来看,这本书提到了一些我不太理解的要点

RFCOMM是一种可靠的基于流的协议。 L2CAP是一种基于数据包的协议,可以配置不同级别的可靠性

L2CAP实际上是RFCOMM的传输协议,因此每个RFCOMM连接实际上都封装在L2CAP连接中。

这让我很困惑,因为这两个协议是不同类型的协议(一个是基于流的,另一个是基于包的)。根据它的解释,我有以下几个问题

  • 既然RFCOMM连接是封装的,那么串行端口配置文件(SPP)如何使用RFCOMM连接?它也应该使用L2CAP

  • A2DP使用L2CAP连接。这对我来说意味着相同,因为L2CAP和RFCOMM封装在ACL连接中,这是否意味着A2DP使用ACL连接?我知道这是不正确的,但如何在这里解释这一点


  • 感谢您的解释。

    封装可能在“设备”驱动程序级别,因此对您来说是不可见的,就像您从未“创建”过以太网数据包,但您仍然能够以本机方式使用TCP/IP,为什么?同样,RFCOMM使用L2CAP,但这并不意味着您需要知道L2CAP才能使用


    通常,当您不想与其他事情发生冲突时,会使用封装,在这种情况下,他们不想与信令问题发生冲突,RFCOMM用于串行接口,因此他们不想处理串行接口的信令问题

    该站点是为编码人员而设,而不是您在这里提出的问题类型,这些问题不坏,只是不适合。谢谢。我认为这些问题也与蓝牙程序员有关。如果你能解释上面的问题,那就太好了。封装可能是在“设备”驱动程序级别,所以它对你来说是不可见的,就像你从来没有“创建”过以太网数据包,但你仍然能够以本机方式使用TCP/IP,为什么?同样的,RFCOMM使用L2CAP,但并不意味着你需要知道L2CAP才能使用OK,你的意思是程序员只需要创建RFCOMM,我们不需要知道RFCOMM是封装在L2CAP中的。谢谢你的解释。根据你提到的和我从书中读到的,我不明白为什么RFCOMM需要封装在L2CAP中。比如说SPP,这可以纯粹使用RFCOMM连接。这种封装有什么好处?通常当你不想与其他东西发生冲突时,使用封装,在这种情况下,他们不想与信令问题发生冲突,RFCOMM用于串行接口,因此他们不想处理串行接口的信令问题,你介意再举一个例子说明为什么需要封装吗?你能详细解释一下吗?谢谢。回答得好@nrathaus。OOP封装了所有类型的东西,并且该类使机制不透明。您甚至可以让同一类的两个对象通信一个协议,而不必看到底层协议在运行,但可以利用派生服务。