gpt4 book ai didi

ios - 将数据同时传输到多个外围设备 ios BLE

转载 作者:行者123 更新时间:2023-12-01 22:30:03 25 4
gpt4 key购买 nike

能够通过蓝牙连接到多个iOS设备,作为1个主设备和4个从设备工作。

通过以下代码从中央到外围的数据传输

[peripheral.peripheral writeValue:currentData forCharacteristic:peripheral.characteristic type:CBCharacteristicWriteWithoutResponse];

但这使拥抱数据丢失,但速度更快。

然后尝试使用以下代码不丢失数据
[peripheral.peripheral writeValue:currentData forCharacteristic:peripheral.characteristic type:CBCharacteristicWriteWithResponse];

尝试同时(同时)将数据传输到多个外围设备
    for (Peripheral * peripheral in self.connectedPeripherals) {
[peripheral.peripheral writeValue:currentData forCharacteristic:peripheral.characteristic type:CBCharacteristicWriteWithResponse];
}

数据一个接一个地传输,一旦第一个外围设备接收到数据然后第二个外围设备获取数据并继续,这似乎是一个延迟。

想要同时传输数据并同时反射(reflect)到所有外设。

最佳答案

当您传输带有响应的数据时,您必须在每次发送数据包时等待其收到的确认。当您传输数据而没有响应时,确认不会被发回,因此吞吐量更高。但是,正如您正确指出的那样,在没有响应的情况下传输数据时可能会丢失数据。发生这种数据丢失的原因是内部 iOS 缓冲区溢出,该缓冲区保存了您调用 - writeValue:forCharacteristic:type: 之间的数据。以及它的实际出发。如果要防止数据丢失,可以执行以下任一操作。

  • 不要向缓冲区写入太多数据,因为如果缓冲区溢出,它会被静默丢弃。我的实验表明,这个缓冲区在正常情况下的大小约为 3kb(iPhone 6、iOS9、1 个外围设备)。对于其他设备,几个连接的外围设备和/或双向传输,这个大小可以更小。所以,如果你有例如1 kb 的数据要发送到 4 个外围设备,然后通过迭代调用 - writeValue:forCharacteristic:type: 来完成。 ,你肯定会面临数据丢失。
  • 在用于无响应写入的特性之上,实现一个协议(protocol)以请求在数据丢失的情况下重新发送丢失的数据包。
  • 写入响应,但将数据分成尽可能大的 block 。正如我之前所说,确认是在每个数据包之后发送回来的,但是这些数据包可以具有不同的大小。使用 iOS8/iOS9,您可以期望在单个数据包中发送多达 155 字节的有效负载。因此,如果您需要发送例如300 字节,最好将它们分成 2 个 150 字节的 block 而不是 15 个 20 字节的 block 。顺便说一句,当你想用 response 写入并提交一个超过 155 字节的值时,iOS 会为你拆分它,但在这种情况下你不会收到回调 `
  • peripheral:didWriteValueForCharacteristic:error:` 数据下发后。
  • 关于ios - 将数据同时传输到多个外围设备 ios BLE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34899631/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com