1
我在Swift 3中使用StreamDelegate連接到Java套接字時遇到了問題。我目前正在重寫一個大型Objective C項目,其中這段代碼像魅力一樣運行,但我似乎無法讓它在Swift 3中工作。我遇到的問題是流功能從不運行。所以「流」!從不打印出來。 self.outputStream.open()
之後的Stream.Status
被稱爲1(開放)。代碼運行時沒有任何問題,並且「打開線程上的流:」被調用。Swift 3輸入流和輸出流連接但沒有流
我試圖連接到的套接字是一個Java套接字。
注:我已經體驗到調試器打印出一條消息,說沒有附加處理程序,但我不知道它是相關的。
我發現了一些類似的帖子,但沒有在這個確切的問題。如果有人有任何想法,我會很高興聽到他們!感謝任何想要幫助的人。
import Foundation
@objc class SocketConnector : NSObject, StreamDelegate {
var inputStream : InputStream!
var outputStream : OutputStream!
var lock : NSRecursiveLock
override init() {
lock = NSRecursiveLock.init()
}
func connect (host : String, port : Int) -> Bool {
lock.lock()
var readStream : Unmanaged<CFReadStream>?
var writeStream : Unmanaged<CFWriteStream>?
CFStreamCreatePairWithSocketToHost(nil, host as CFString!, UInt32(port), &readStream, &writeStream)
inputStream = readStream!.takeRetainedValue()
outputStream = writeStream!.takeRetainedValue()
self.inputStream.delegate = self
self.outputStream.delegate = self
self.inputStream.schedule(in: RunLoop.current, forMode: .defaultRunLoopMode)
self.outputStream.schedule(in: RunLoop.current, forMode: .defaultRunLoopMode)
self.inputStream.open()
self.outputStream.open()
print("Opening streams on thread: %@", Thread.current)
lock.unlock()
return true
}
func stream (aStream : Stream, handleEvent eventCode : Stream.Event) {
print("Stream!")
switch eventCode {
case Stream.Event.hasBytesAvailable:
print("Stream has bytes:");
break;
case Stream.Event.errorOccurred:
print("Stream error occurred: %@",aStream.streamError?.localizedDescription)
case Stream.Event.openCompleted:
print("Stream has bytes:")
break
case Stream.Event.endEncountered:
print("Stream ended")
self.closeStreams()
break
default:
break
}
}
謝謝,你好!這個錯誤從來沒有發生過,我習慣於編譯器清理這樣的事情。現在完美! – andeey