CoreBluetooth
CBL2CAPChannel
我已经在应用程序中使用 ,设置了一些数据传输功能Swift
iOS
。下面是发送数据的函数:
func sendData(_ outStream: OutputStream) -> Bool {
let data = tranferBlock! // tranferBlock holds some .utf8 data.
let bytesWritten = data.withUnsafeBytes {outStream.write($0, maxLength: data.count)}
if bytesWritten > 0 {
tranferBlock = nil
return true
}
return false
}
这是接收数据的函数:
func receiveData(_ inStream: InputStream) {
let bufLength = 1024
let buffer = UnsafeMutablePointer<UInt8>.allocate(capacity: bufLength)
let bytesRead = inStream.read(buffer, maxLength: bufLength)
if let string = String(bytesNoCopy: buffer,
length: bytesRead,
encoding: .utf8,
freeWhenDone: false) {
print("READ-L2CAPData:\(bytesRead):\(string)")
if bytesRead != 0 {
receiveBuffer = string // receiveBuffer holds the received data.
let ntfc = NotificationCenter.default
ntfc.post(name:Notification.Name(rawValue: "DATACAMEIN"),
object: nil, userInfo: nil)
}
}
}
我可以说,它正在工作,因为这允许我传输数据。但是有一个问题:我接收数据的方式与发送数据的方式不同。例如,假设我以 3 个数据包发送数据,如下所示:
.......
tranferBlock = Data("aaaAAAaaa".utf8)
sendData(outStream)
tranferBlock = Data("bbbBBBbbb".utf8)
sendData(outStream)
tranferBlock = Data("cccCCCccc".utf8)
sendData(outStream)
.......
我希望在这种情况下以 3 个数据包的形式接收数据,其速度与我发送它们的速度大致相同:
aaaAAAaaa
bbbBBBbbb
cccCCCccc
但相反,我收到一个数据包:
aaaAAAaaabbbBBBbbbcccCCCccc
而且很多时候,出于某种我不知道的原因,只有当我杀死发送应用程序时。
我想知道我需要改变什么才能以我期望的方式接收数据。