我试图通过TLS在iPhone和BeagleBone Black Wireless之间发送数据。但是,我遇到了一些奇怪的问题。这个问题的问题是没有调用委托方法stream(_:handle:)
的原因。我已经阅读了文档和其他StackOverflow问题,但我的代码已经考虑了他们的问题。
这是我的变量:
private var readStream: Unmanaged<CFReadStream>?
private var writeStream: Unmanaged<CFWriteStream>?
private var inputStream: InputStream?
private var outputStream: OutputStream?
这是我打开流的代码:
CFStreamCreatePairWithSocketToHost(kCFAllocatorDefault, (socket.ipAddress as CFString), UInt32(socket.port), &readStream, &writeStream)
outputStream = writeStream?.takeRetainedValue()
inputStream = readStream?.takeRetainedValue()
outputStream?.delegate = self
inputStream?.delegate = self
outputStream?.schedule(in: .current, forMode: .default)
inputStream?.schedule(in: .current, forMode: .default)
outputStream?.open()
inputStream?.open()
这是与我的代码中显示的委托方法完全相同(它由Xcode自动完成,因此没有问题):
private func stream(_ aStream: Stream, handle eventCode: Stream.Event) {
print("Received event code \(eventCode.rawValue)")
}
但是出于某种原因,这种方法永远不会被调用。事实上,我尝试通过写入outputStream
发送数据,BBBW实际上已成功收到消息! (虽然,如果我再次尝试发送消息,我会收到Connection reset by peer
错误。)
啊我明白了!
问题是我制作了委托方法private
。一旦我摆脱了那个关键字,一切都成功了:)