Ios 使用CoreBluetooth/L2CAP通道传输数据

Ios 使用CoreBluetooth/L2CAP通道传输数据,ios,swift,core-bluetooth,l2cap,Ios,Swift,Core Bluetooth,L2cap,在尝试使用L2CAP频道在CoreBluetooth中设置数据传输时。 我有问题。在发送端,我有一个按键触发的功能: @objc func sendL2CAPInfo() { print(#function) let value = "Hello L2Cap Stream data...", data = Data(value.utf8) outPutStream.open() print("outPutStream -> \(outPutStrea

在尝试使用
L2CAP
频道在
CoreBluetooth
中设置数据传输时。 我有问题。在发送端,我有一个按键触发的功能:

@objc func sendL2CAPInfo() {
    print(#function)
    let value = "Hello L2Cap Stream data...",
    data = Data(value.utf8)
    outPutStream.open()
    print("outPutStream -> \(outPutStream.debugDescription)")
    let bytesWritten = data.withUnsafeBytes { outPutStream.write($0, maxLength: data.count) }
    print("bytesWritten = \(bytesWritten)")
}
@objc func receiveL2CAPInfo() {
    print(#function)
    let bufLength = 10
    var buffer = UnsafeMutablePointer<UInt8>.allocate(capacity: bufLength)
    inPutStream.open()
    let bytesRead = inPutStream.read(buffer, maxLength: bufLength)
    print("bytesRead = \(bytesRead)")
}
执行时,我在Xcode调试控制台中看到:

sendL2CAPInfo()
outPutStream -> Optional(<__NSCFOutputStream: 0x282969b00>)
bytesWritten = 26
centralManagerDidUpdateState
centralManager(_:didDiscover:advertisementData:rssi:)
centralManager(_:didConnect:)
peripheral(_:didOpen:error:)
2019-01-17 13:16:37.168700+0900 CBL2CAPCh_Central[857:127305] [CoreBluetooth] WARNING: Unknown error: 431
stream(_:handle:)
Input-Stream
Stream.Event.openCompleted
stream(_:handle:)
Input-Stream
Stream.Event.hasBytesAvailable
receiveL2CAPInfo()
bytesRead = 0
stream(_:handle:)
Input-Stream
Stream.Event.endEncountered
启动接收应用程序时(发送应用程序运行时),我在Xcode调试控制台中看到:

sendL2CAPInfo()
outPutStream -> Optional(<__NSCFOutputStream: 0x282969b00>)
bytesWritten = 26
centralManagerDidUpdateState
centralManager(_:didDiscover:advertisementData:rssi:)
centralManager(_:didConnect:)
peripheral(_:didOpen:error:)
2019-01-17 13:16:37.168700+0900 CBL2CAPCh_Central[857:127305] [CoreBluetooth] WARNING: Unknown error: 431
stream(_:handle:)
Input-Stream
Stream.Event.openCompleted
stream(_:handle:)
Input-Stream
Stream.Event.hasBytesAvailable
receiveL2CAPInfo()
bytesRead = 0
stream(_:handle:)
Input-Stream
Stream.Event.endEncountered
在发送端,似乎一切正常,写入了26个字节。 另一方面,在接收端,我们没有看到26个字节进入

怎么了?我以前从未使用过L2CAP频道,所以我肯定做了一些不好的事情,但我不知道是什么。任何关于检查内容或查看位置的建议都将不胜感激

。。。。。 在深入研究这个主题之后,这里有一些更多的信息

以下是stream(u:handle:)函数的代码:

func stream(_ aStream: Stream,
            handle eventCode: Stream.Event) {
    print(#function)
    if aStream == inPutStream {print("Input-Stream")}
    if aStream == outPutStream {print("Output-Stream")}

    if (aStream != inPutStream) && (aStream != outPutStream)
    {print("Some-other-Stream")}

    switch eventCode {
    case Stream.Event.hasBytesAvailable:
        print("Stream.Event.hasBytesAvailable")
    case Stream.Event.hasSpaceAvailable:
        print("Stream.Event.hasSpaceAvailable")
    case Stream.Event.openCompleted:
        print("Stream.Event.openCompleted")
    case Stream.Event.endEncountered:
        print("Stream.Event.endEncountered")
    case Stream.Event.errorOccurred:
        print("Stream.Event.errorOccurred")
        if let error = aStream.streamError {
            print("Error:\n\t\(error.localizedDescription)")
        }
    default:
        print("Stream.Event.SOME-OTHER-THING-HAPPENED")
    }
}
以下是中央应用程序启动后,在尝试写入任何内容之前,调试器中可以看到的内容:

centralManagerDidUpdateState
centralManager(_:didDiscover:advertisementData:rssi:)
centralManager(_:didConnect:)
peripheral(_:didOpen:error:)
2019-01-18 13:32:14.840892+0900 CBL2CAPCh_Central[571:80355] [CoreBluetooth] WARNING: Unknown error: 431
stream(_:handle:)
Input-Stream
Stream.Event.openCompleted
stream(_:handle:)
Input-Stream
Stream.Event.hasBytesAvailable
stream(_:handle:)
Output-Stream
Stream.Event.openCompleted
stream(_:handle:)
Output-Stream
Stream.Event.hasSpaceAvailable
centralManager(_:didDisconnectPeripheral:error:)
centralManager(_:didConnect:)
peripheral(_:didOpen:error:)
2019-01-18 13:32:28.521320+0900 CBL2CAPCh_Central[571:80355] [CoreBluetooth] WARNING: Unknown error: 431
stream(_:handle:)
Output-Stream
Stream.Event.openCompleted
stream(_:handle:)
Input-Stream
Stream.Event.openCompleted
stream(_:handle:)
Input-Stream
Stream.Event.hasBytesAvailable
stream(_:handle:)
Output-Stream
Stream.Event.hasSpaceAvailable
2019-01-18 13:32:28.523746+0900 CBL2CAPCh_Central[571:80355] [CoreBluetooth] No known channel matching peer <CBPeripheral: 0x281bc4a00, identifier = D73B08A0-E9BB-483B-8078-4A7F992E7565, name = Michel’s iPad, state = connected> with psm 192
centralManager(_:didDisconnectPeripheral:error:)
centralManager(_:didConnect:)
peripheral(_:didOpen:error:)
2019-01-18 13:32:38.948090+0900 CBL2CAPCh_Central[571:80355] [CoreBluetooth] WARNING: Unknown error: 431
stream(_:handle:)
Some-other-Stream
Stream.Event.hasBytesAvailable
stream(_:handle:)
Some-other-Stream
Stream.Event.hasSpaceAvailable
stream(_:handle:)
Output-Stream
Stream.Event.openCompleted
2019-01-18 13:32:38.949889+0900 CBL2CAPCh_Central[571:80355] [CoreBluetooth] No known channel matching peer <CBPeripheral: 0x281bc4a00, identifier = D73B08A0-E9BB-483B-8078-4A7F992E7565, name = Michel’s iPad, state = connected> with psm 192
stream(_:handle:)
Input-Stream
Stream.Event.openCompleted
centralManager(_:didDisconnectPeripheral:error:)
centralManager(_:didConnect:)
peripheral(_:didOpen:error:)
2019-01-18 13:32:49.278142+0900 CBL2CAPCh_Central[571:80355] [CoreBluetooth] WARNING: Unknown error: 431
stream(_:handle:)
Output-Stream
Stream.Event.openCompleted
stream(_:handle:)
Some-other-Stream
Stream.Event.hasBytesAvailable
stream(_:handle:)
Some-other-Stream
Stream.Event.hasSpaceAvailable
2019-01-18 13:32:49.280093+0900 CBL2CAPCh_Central[571:80355] [CoreBluetooth] No known channel matching peer <CBPeripheral: 0x281bc4a00, identifier = D73B08A0-E9BB-483B-8078-4A7F992E7565, name = Michel’s iPad, state = connected> with psm 192
stream(_:handle:)
Input-Stream
Stream.Event.openCompleted
centralManager(_:didDisconnectPeripheral:error:)
centralManager(_:didConnect:)
peripheral(_:didOpen:error:)
2019-01-18 13:32:59.739338+0900 CBL2CAPCh_Central[571:80355] [CoreBluetooth] WARNING: Unknown error: 431
stream(_:handle:)
Some-other-Stream
Stream.Event.hasSpaceAvailable
stream(_:handle:)
Output-Stream
Stream.Event.openCompleted
stream(_:handle:)
Some-other-Stream
Stream.Event.hasBytesAvailable
stream(_:handle:)
Input-Stream
Stream.Event.openCompleted
2019-01-18 13:32:59.741111+0900 CBL2CAPCh_Central[571:80355] [CoreBluetooth] No known channel matching peer <CBPeripheral: 0x281bc4a00, identifier = D73B08A0-E9BB-483B-8078-4A7F992E7565, name = Michel’s iPad, state = connected> with psm 192
centralManager(_:didDisconnectPeripheral:error:)
centralManager(_:didConnect:)
peripheral(_:didOpen:error:)
2019-01-18 13:33:10.567965+0900 CBL2CAPCh_Central[571:80355] [CoreBluetooth] WARNING: Unknown error: 431
stream(_:handle:)
Output-Stream
Stream.Event.openCompleted
stream(_:handle:)
Some-other-Stream
Stream.Event.hasBytesAvailable
stream(_:handle:)
Some-other-Stream
Stream.Event.hasSpaceAvailable
2019-01-18 13:33:10.569722+0900 CBL2CAPCh_Central[571:80355] [CoreBluetooth] No known channel matching peer <CBPeripheral: 0x281bc4a00, identifier = D73B08A0-E9BB-483B-8078-4A7F992E7565, name = Michel’s iPad, state = connected> with psm 192
stream(_:handle:)
Input-Stream
Stream.Event.openCompleted
centralManager(_:didDisconnectPeripheral:error:)
centralManager(_:didConnect:)
peripheral(_:didOpen:error:)
2019-01-18 13:33:21.404162+0900 CBL2CAPCh_Central[571:80355] [CoreBluetooth] WARNING: Unknown error: 431
stream(_:handle:)
Some-other-Stream
Stream.Event.hasBytesAvailable
stream(_:handle:)
Some-other-Stream
Stream.Event.hasSpaceAvailable
stream(_:handle:)
Output-Stream
Stream.Event.openCompleted
2019-01-18 13:33:21.406243+0900 CBL2CAPCh_Central[571:80355] [CoreBluetooth] No known channel matching peer <CBPeripheral: 0x281bc4a00, identifier = D73B08A0-E9BB-483B-8078-4A7F992E7565, name = Michel’s iPad, state = connected> with psm 192
stream(_:handle:)
Input-Stream
Stream.Event.openCompleted
centralManager(_:didDisconnectPeripheral:error:)
centralManager(_:didConnect:)
peripheral(_:didOpen:error:)
2019-01-18 13:33:32.147567+0900 CBL2CAPCh_Central[571:80355] [CoreBluetooth] WARNING: Unknown error: 431
stream(_:handle:)
Output-Stream
Stream.Event.openCompleted
stream(_:handle:)
Some-other-Stream
Stream.Event.hasBytesAvailable
stream(_:handle:)
Some-other-Stream
Stream.Event.hasSpaceAvailable
2019-01-18 13:33:32.148884+0900 CBL2CAPCh_Central[571:80355] [CoreBluetooth] No known channel matching peer <CBPeripheral: 0x281bc4a00, identifier = D73B08A0-E9BB-483B-8078-4A7F992E7565, name = Michel’s iPad, state = connected> with psm 192
stream(_:handle:)
Input-Stream
Stream.Event.openCompleted
centralManager(_:didDisconnectPeripheral:error:)
centralManager(_:didConnect:)
peripheral(_:didOpen:error:)
2019-01-18 13:33:42.788001+0900 CBL2CAPCh_Central[571:80355] [CoreBluetooth] WARNING: Unknown error: 431
stream(_:handle:)
Some-other-Stream
Stream.Event.hasBytesAvailable
stream(_:handle:)
Some-other-Stream
Stream.Event.hasSpaceAvailable
stream(_:handle:)
Output-Stream
Stream.Event.openCompleted
2019-01-18 13:33:42.789921+0900 CBL2CAPCh_Central[571:80355] [CoreBluetooth] No known channel matching peer <CBPeripheral: 0x281bc4a00, identifier = D73B08A0-E9BB-483B-8078-4A7F992E7565, name = Michel’s iPad, state = connected> with psm 192
stream(_:handle:)
Input-Stream
Stream.Event.openCompleted
centralManager(_:didDisconnectPeripheral:error:)
centralManager(_:didConnect:)
peripheral(_:didOpen:error:)
2019-01-18 13:33:53.734140+0900 CBL2CAPCh_Central[571:80355] [CoreBluetooth] WARNING: Unknown error: 431
stream(_:handle:)
Output-Stream
Stream.Event.openCompleted
stream(_:handle:)
Some-other-Stream
Stream.Event.hasBytesAvailable
stream(_:handle:)
Some-other-Stream
Stream.Event.hasSpaceAvailable
2019-01-18 13:33:53.736063+0900 CBL2CAPCh_Central[571:80355] [CoreBluetooth] No known channel matching peer <CBPeripheral: 0x281bc4a00, identifier = D73B08A0-E9BB-483B-8078-4A7F992E7565, name = Michel’s iPad, state = connected> with psm 192
stream(_:handle:)
Input-Stream
Stream.Event.openCompleted
centralManager(_:didDisconnectPeripheral:error:)
centralManager(_:didConnect:)
peripheral(_:didOpen:error:)
stream(_:handle:)
Output-Stream
Stream.Event.openCompleted
stream(_:handle:)
Some-other-Stream
Stream.Event.hasSpaceAvailable
stream(_:handle:)
Input-Stream
Stream.Event.openCompleted
stream(_:handle:)
Some-other-Stream
Stream.Event.hasBytesAvailable
2019-01-18 13:34:04.231561+0900 CBL2CAPCh_Central[571:80355] [CoreBluetooth] WARNING: Unknown error: 436
centralManager(_:didDisconnectPeripheral:error:)
centralManager(_:didConnect:)
peripheral(_:didOpen:error:)
stream(_:handle:)
Output-Stream
Stream.Event.openCompleted
stream(_:handle:)
Some-other-Stream
Stream.Event.hasSpaceAvailable
stream(_:handle:)
Input-Stream
Stream.Event.openCompleted
stream(_:handle:)
Some-other-Stream
Stream.Event.hasBytesAvailable
2019-01-18 13:34:14.861939+0900 CBL2CAPCh_Central[571:80355] [CoreBluetooth] WARNING: Unknown error: 436
centralManager(_:didDisconnectPeripheral:error:)
centralManager(_:didConnect:)
peripheral(_:didOpen:error:)
stream(_:handle:)
Some-other-Stream
Stream.Event.hasSpaceAvailable
stream(_:handle:)
Output-Stream
Stream.Event.openCompleted
stream(_:handle:)
Input-Stream
Stream.Event.openCompleted
stream(_:handle:)
Some-other-Stream
Stream.Event.hasBytesAvailable
2019-01-18 13:34:25.472075+0900 CBL2CAPCh_Central[571:80355] [CoreBluetooth] WARNING: Unknown error: 436
CentralManagerDipDateState
centralManager(u2;:didDiscover:advertisementData:rssi:)
centralManager(u3;:didConnect:)
外围设备(ux0:didOpen:错误:)
2019-01-18 13:32:14.840892+0900 CBL2CAPCh_Central[571:80355][CoreBluetooth]警告:未知错误:431
流(句柄:)
输入流
Stream.Event.openCompleted
流(句柄:)
输入流
Stream.Event.hasbytes可用
流(句柄:)
输出流
Stream.Event.openCompleted
流(句柄:)
输出流
Stream.Event.hasSpaceAvailable
centralManager(u3;:DidDisconnect外围设备:错误:)
centralManager(u3;:didConnect:)
外围设备(ux0:didOpen:错误:)
2019-01-18 13:32:28.521320+0900 CBL2CAPCh_Central[571:80355][CoreBluetooth]警告:未知错误:431
流(句柄:)
输出流
Stream.Event.openCompleted
流(句柄:)
输入流
Stream.Event.openCompleted
流(句柄:)
输入流
Stream.Event.hasbytes可用
流(句柄:)
输出流
Stream.Event.hasSpaceAvailable
2019-01-18 13:32:28.523746+0900 CBL2CAPCh_Central[571:80355][CoreBluetooth]没有已知的与psm 192匹配的对等信道
centralManager(u3;:DidDisconnect外围设备:错误:)
centralManager(u3;:didConnect:)
外围设备(ux0:didOpen:错误:)
2019-01-18 13:32:38.948090+0900 CBL2CAPCh_Central[571:80355][CoreBluetooth]警告:未知错误:431
流(句柄:)
另一条小溪
Stream.Event.hasbytes可用
流(句柄:)
另一条小溪
Stream.Event.hasSpaceAvailable
流(句柄:)
输出流
Stream.Event.openCompleted
2019-01-18 13:32:38.949889+0900 CBL2CAPCh_Central[571:80355][CoreBluetooth]没有已知的与psm 192匹配的对等信道
流(句柄:)
输入流
Stream.Event.openCompleted
centralManager(u3;:DidDisconnect外围设备:错误:)
centralManager(u3;:didConnect:)
外围设备(ux0:didOpen:错误:)
2019-01-18 13:32:49.278142+0900 CBL2CAPCh_Central[571:80355][CoreBluetooth]警告:未知错误:431
流(句柄:)
输出流
Stream.Event.openCompleted
流(句柄:)
另一条小溪
Stream.Event.hasbytes可用
流(句柄:)
另一条小溪
Stream.Event.hasSpaceAvailable
2019-01-18 13:32:49.280093+0900 CBL2CAPCh_Central[571:80355][CoreBluetooth]没有已知的与psm 192匹配的对等信道
流(句柄:)
输入流
Stream.Event.openCompleted
centralManager(u3;:DidDisconnect外围设备:错误:)
centralManager(u3;:didConnect:)
外围设备(ux0:didOpen:错误:)
2019-01-18 13:32:59.739338+0900 CBL2CAPCh_Central[571:80355][CoreBluetooth]警告:未知错误:431
流(句柄:)
另一条小溪
Stream.Event.hasSpaceAvailable
流(句柄:)
输出流
Stream.Event.openCompleted
流(句柄:)
另一条小溪
Stream.Event.hasbytes可用
流(句柄:)
输入流
Stream.Event.openCompleted
2019-01-18 13:32:59.741111+0900 CBL2CAPCh_Central[571:80355][CoreBluetooth]没有已知的与psm 192匹配的对等信道
centralManager(u3;:DidDisconnect外围设备:错误:)
centralManager(u3;:didConnect:)
外围设备(ux0:didOpen:错误:)
2019-01-18 13:33:10.567965+0900 CBL2CAPCh_Central[571:80355][CoreBluetooth]警告:未知错误:431
流(句柄:)
输出流
Stream.Event.openCompleted
流(句柄:)
另一条小溪
Stream.Event.hasbytes可用
流(句柄:)
另一条小溪
Stream.Event.hasSpaceAvailable
2019-01-18 13:33:10.569722+0900 CBL2CAPCh_Central[571:80355][CoreBluetooth]没有已知的与psm 192匹配的对等通道
流(句柄:)
输入流
Stream.Event.openCompleted
centralManager(u3;:DidDisconnect外围设备:错误:)
centralManager(u3;:didConnect:)
外围设备(ux0:didOpen:错误:)
2019-01-18 13:33:21.404162+0900 CBL2CAPCh_Central[571:80355][CoreBluetooth]警告:未知错误:431
流(句柄:)
另一条小溪
Stream.Event.hasbytes可用
流(句柄:)
另一条小溪
Stream.Event.hasSpaceAvailable
流(句柄:)
输出流
Stream.Event.openCompleted
2019-01-18 13:33:21.406243+0900 CBL2CAPCh_Central[571:80355][CoreBluetooth]没有已知的与psm 192匹配的对等通道
流(句柄:)
输入流
Stream.Event.openCompleted
centralManager(u3;:DidDisconnect外围设备:错误:)
centralManager(u3;:didConnect:)
外围设备(ux0:didOpen:错误:)
2019-01-18 13:33:32.147567+0900 CBL2CAPCh_Central[571:80355][CoreBluetooth]警告:未知错误:431
流(句柄:)
输出流
Stream.Event.openCompleted
流(句柄:)
另一条小溪
Stream.Event.hasbytes可用
流(句柄:)
另一条小溪
Stream.Event.hasSpaceAvailable
2019-01-18 13:33:32.148884+0900 CBL2CAPCh_Central[571:80355][CoreBluetooth]没有已知的与psm 192匹配的对等信道
流(句柄:)
输入流
Stream.Event.openCompleted
centralManager(u3;:DidDisconnect外围设备:错误:)
centralManager(u3;:didConnect:)
外围设备(ux0:didOpen:错误:)
2019-01-18 13:33:42.788001+0900 CBL2CAPCh_Central[571:80355][CoreBluetooth]警告:未知错误:431
流(句柄:)
另一条小溪
Stream.Event.hasbytes可用
流(句柄:)
Some-o
 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")
            if let iStream = aStream as? InputStream {
                let bufLength = 1024
                let buffer = UnsafeMutablePointer<UInt8>.allocate(capacity: bufLength)
                let bytesRead = iStream.read(buffer, maxLength: bufLength)
                print("bytesRead = \(bytesRead)")
                if let string = String(bytesNoCopy: buffer, length: bytesRead, encoding: .utf8, freeWhenDone: false) {
                    print("Received data: \(string)")
                }
            }
        case Stream.Event.hasSpaceAvailable:
            print("Space is available")
        case Stream.Event.errorOccurred:
            print("Stream error")
        default:
            print("Unknown stream event")
    }
}