Я пытаюсь отправить данные между iPhone и BeagleBone Black Wireless через TLS. Тем не менее, я сталкиваюсь с некоторыми странными проблемами. Проблема, о которой идет речь в этом вопросе, заключается в том, почему метод делегата 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
. Как только я избавился от этого ключевого слова, все получилось :)