1

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

而且很多时候,出于某种我不知道的原因,只有当我杀死发送应用程序时。

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

4

0 回答 0