我已经在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
很多时候,由于某种原因,我不知道,只有当我终止发送应用程序时。
我想知道我需要做些什么才能以期望的方式接收数据。