gpt4 book ai didi

ios - L2CAP channel ,字节已发送但未到达

转载 作者:行者123 更新时间:2023-11-29 05:29:45 29 4
gpt4 key购买 nike

在 iOS 应用程序中,我正在使用 CoreBlueTooth L2CAP channel 在一台设备和另一台设备之间进行音频文件传输。它已经工作了一半,但还没有完全工作。此时我已经转移了文件名,但是来到文件内容,情况是这样的。

在发送端,所有字节(几十万字节)都分布在几个 block 上发送。但在接收端,似乎只有前几千字节到达目的地。

功能:

func stream(_ aStream: Stream,
handle eventCode: Stream.Event) {
......
}

被调用一次(使用 Stream.Event.hasBytesAvailable)并获取前几千个字节。但之后就再也没有被调用过。原因可能是什么?我希望它可以根据需要多次调用,直到收到所有字节为止。

最佳答案

完成read后,您需要检查流的hasBytesAvailable属性,如果为真,则发出另一个read。可能不会调用事件处理程序。

例如:

func stream(_ aStream: Stream, handle eventCode: Stream.Event) {
switch eventCode {
case Stream.Event.openCompleted:
print("Stream is open")
case Stream.Event.endEncountered:
print("End Encountered")
case Stream.Event.hasBytesAvailable:
print("Bytes are available")
self.readBytes(from: aStream as! InputStream)
case Stream.Event.hasSpaceAvailable:
print("Space is available")
case Stream.Event.errorOccurred:
print("Stream error")
default:
print("Unknown stream event")
}
}

func readBytes(from stream: InputStream) {
let bufLength = 1024
let buffer = UnsafeMutablePointer<UInt8>.allocate(capacity: bufLength)
let bytesRead = stream.read(buffer, maxLength: bufLength)
print("bytesRead = \(bytesRead)")
self.bytesReceived += bytesRead
if stream.hasBytesAvailable {
self.readBytes(from: stream)
}
}

关于ios - L2CAP channel ,字节已发送但未到达,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57766215/

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