使用CoreBluetooth CBL2CAPChannel移动数据

时间:2019-08-24 07:30:03

标签: ios swift core-bluetooth l2cap

我已经在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

很多时候,由于某种原因,我不知道,只有当我终止发送应用程序时。

我想知道我需要做些什么才能以期望的方式接收数据。

0 个答案:

没有答案