获取谈判MTU

我目前正在iOS中开发一个BLE应用程序。 在我的应用程序中,我需要实现一个分段协议来使用BLE发送大数据。 我的应用程序需要具有Central角色。

我的问题是我无法获得谈判MTU。 我可以得到我的外围设备的maximumWriteValueLength但它比我的更大,并且找不到我的中心对象的maximumWriteValueLength。

有人知道找到协商MTU的方法或访问我的CBCentralManager的CBCentral对象的方法吗?

iOS在连接时自动启动MTU交换。

运行iOS <10的设备将请求MTU大小为158.运行iOS 10的较新设备将请求MTU大小为185。

假设您连接的设备支持这些尺寸,那就是您应该看到的。

您应该能够通过查看maximumUpdateValueLength属性来确定协商的最大有效负载大小。 (注意,这将比ATT MTU小3个字节,因为这是ATT通知/指示的开销)

我会回答有同样问题的人。

现在(2017年2月),外围角色的iPhone的MTU总是为158.所以我在简短的解决方案(仅进行一些测试)中找到的是将中央MTU与158进行比较并采用较小的MTU。 对于解决方案,更稳定的外设将MTU大小写入我将在连接后读取的特定特性内。