android - BLE:MTU 交换后降低 MTU 值大小(差异较大)
问题描述
我是 BLE 开发的新手。我想通过 BLE 连接以最大吞吐量发送大量数据。
我有一个在 Linux 上运行的 GATT 服务器和一个在 Android 上作为应用程序运行的客户端。我创建了一个具有最大允许大小(512 字节)的自定义特征。我通过读取操作从应用程序请求它。每次我在服务器端收到读取请求时,我都会更改它的值,直到我完成所有数据(我知道这不是最好的方法,但现在这不是问题)。
至于使用 android 的 requestConnectionPriority(CONNECTION_PRIORITY_HIGH) 的连接参数,我可以看到他们正在尝试协商 7.5 毫秒的连接间隔,但由于某种原因,它变为 15 毫秒并保持在那里。也许我的手机不支持它,但我不这么认为。
接下来的主要问题是 MTU。使用 hcidump,我可以看到他们开始协商 MTU,因为我可以看到来自客户端的 MTU 请求,其值为 517(默认情况下),服务器响应具有相同的值。但是当我触发数据交换时,我可以看到(使用 Wireshark)数据包仅包含 32 个字节的有效负载。我不知道这是否是我的蓝牙适配器的限制。
解决方案
一个 MTU 数据包可以包含许多无线电数据包,而 32 字节的无线电数据包有效负载可能是您的蓝牙适配器中的一个限制。目前没有手机支持 7.5ms 的连接间隔。如果您的手机和设备支持,您还应该启用数据长度扩展。这将允许您在整个连接事件中传输多个 MTU。
推荐阅读
- c# - 找不到包裹***。源中不存在具有此 ID 的包:“Local Nuget”、Microsoft Visual Studio 脱机包、nuget.org
- python - 帧中的背景检测
- java - 如何在 Kotlin 中获取 Java 原始 void 类?
- django - Django 在每个视图中显示消息
- c++ - C++ condition_variable wait_for() 永远阻塞
- windows - VBScript Windows 自动登录脚本
- spring - Spring Boot 2 MongoDB @TypeAlias 不起作用
- c# - 固定包含非 blitable 类型的结构数组 c#
- excel - 自定义插件中的 VBA 表单
- javascript - 如何以编程方式为整个组件访问 Vue 组件中样式标签的内容(innerText)?