iOS - InputStream:没有可用的缓冲区空间(55)

时间:2017-02-09 20:37:48

标签: ios swift streaming inputstream outputstream

我知道有很多关于没有调用委托方法的问题,但这是一个最初被调用的委托方法的问题,然后停止被调用。

所以基本上我有一个创建的流

outputStream = try self.appDelegate.connectionManager.sessions[sessionIndex!].startStream(withName: "newStream", toPeer: peerID!)

创建流时,我有一个被调用的委托方法,它执行以下操作。我有打印声明,似乎这种方法运行正常,所以我不相信问题在这里:

    func startedStreamWithPeer(_ peerID: MCPeerID, inputStream: InputStream) {
        self.recordingQueue.sync {
            self.inputStream = inputStream
            self.inputStreamIsSet = true
            self.inputStream!.delegate = self
            self.inputStream!.schedule(in: RunLoop.main, forMode: RunLoopMode.defaultRunLoopMode)
            self.inputStream!.open()

            self.outputStream!.delegate = self
            self.outputStream!.schedule(in: RunLoop.current, forMode: RunLoopMode.defaultRunLoopMode)
            self.outputStream!.open()

            self.startRecording()
        }
    }

然后我写入输出流

let output = self.outputStream!.write(audioBuffer, maxLength: audioBuffer.count)

在另一台设备上,我从流中接收数据:

func stream(_ aStream: Stream, handle eventCode: Stream.Event) {

    switch (eventCode) {

    case Stream.Event.errorOccurred:
        print("\(#file) > \(#function) > Error has occurred on input stream")

    case Stream.Event.hasBytesAvailable:
        print("\(#file) > \(#function) > New data has arrived")

        receivingQueue.sync {
            self.readFromStream()
        }
    }
}

此方法被调用两次,永远不会再次调用。但是,我可以看到流仍然被写入,因为最终会不断打印出这个错误:

[GCKSession] Failed to send a DTLS packet with 1198 bytes; sendmsg error: No buffer space available (55).

此外,当我转到xCode中的调试导航器时,我可以看到正在发送和接收数据。两种方式的数据大约为0.2 mbps。

0 个答案:

没有答案