Ios 使用CoreBlueTooth L2CAP通道传输音频文件

Ios 使用CoreBlueTooth L2CAP通道传输音频文件,ios,swift,core-bluetooth,l2cap,Ios,Swift,Core Bluetooth,L2cap,我需要一些示例代码来了解如何使用CoreBlueTooth L2CAP通道传输音频文件(或任何其他二进制数据)。假设文件不是那么小,我们假设它是几百KB 我正在开发一个小的iOS应用程序来实现这一点,但它只是工作了一半 在这一点上,我可以传输几千个字节,但它不会更进一步 以防万一,这是我在发送端的相关代码: let path = Bundle.main.path(forResource: "\(name)", ofType: nil)!, url = URL(fileURLWithPath: p

我需要一些示例代码来了解如何使用CoreBlueTooth L2CAP通道传输音频文件(或任何其他二进制数据)。假设文件不是那么小,我们假设它是几百KB

我正在开发一个小的iOS应用程序来实现这一点,但它只是工作了一半

在这一点上,我可以传输几千个字节,但它不会更进一步

以防万一,这是我在发送端的相关代码:

let path = Bundle.main.path(forResource: "\(name)", ofType: nil)!,
url = URL(fileURLWithPath: path)

do {let audioData = try Data(contentsOf: url)
    // do something useful with audioData to send it
    // to the other device.
    ..........
    let bytesWritten = data.withUnsafeBytes {outStream!.write($0, maxLength: audioData.count)}

    if bytesWritten > 0 {
        ..........
    }

} catch {
    print("Error: \(error.localizedDescription)")
}
在接受方:

let inData = Data(reading: inStream)

if inData.count != 0 {
    // Data has been received.
    .......
}

我显然没有展示太多细节,但我的代码缺少一些关键部分,这就是为什么我很高兴找到一些小的工作示例,以便了解它是如何工作的。

请参阅。特别是,您需要确保在runloop上调度流。在检查了我的代码(与您提到的链接)之后,也可以看到,调度似乎没有任何问题。但我不确定在“let bytesWrite=data.withUnsafeBytes{ostream.write($0,maxLength:data.count)}”中,不是所有字节都可以写入时会发生什么。我不清楚如何处理左边的字节。这可能不会发生在演示中,因为它只发送小部分文本。但我想处理的音频文件,我将无法发送所有的字节在同一时间。我不知道该怎么办。事实上,我已经发送了包含数千字节音频数据的第一个数据块,但在第一个数据块处停止。L2CAP的输出容量有限。当
hasspaceavable
为真时,您需要循环返回并发送更多信息。L2CAP不是一个快速协议。