Ich habe ein Problem mit der Verbindung zu einem Java-Socket mit StreamDelegate in Swift 3. Ich bin gerade dabei, ein großes Objective-C-Projekt zu schreiben, wo dieses Stück Code wie ein Charme läuft , aber ich kann nicht scheinen, es in Swift 3 zur Arbeit zu bringen. Das Problem, das ich habe, ist, dass die Stromfunktion nie läuft. Also "Strom!" wird nie ausgedruckt. Die Stream.Status
nach self.outputStream.open()
heißt 1 (Öffnung). Der Code läuft ohne Probleme und "Opening streams on thread:" wird aufgerufen.Swift 3 inputstream und outputstream verbinden, aber kein Stream
Der Socket, mit dem ich mich verbinden möchte, ist ein Java-Socket.
Hinweis: Ich habe erfahren, dass der Debugger eine Nachricht ausgedruckt hat, die besagt, dass kein Handler angeschlossen ist, aber ich weiß nicht, dass es verwandt ist.
Ich habe ein paar ähnliche Beiträge gefunden, aber nicht zu diesem genauen Problem. Wenn jemand Ideen hat, würde ich mich freuen, sie zu hören! Danke an jeden, der versucht zu helfen.
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
}
}
Vielen Dank, Hoa! Dieser Fehler ist mir nie in den Sinn gekommen. Ich bin den Compiler gewohnt, Dinge wie diese aufzuräumen. Es funktioniert perfekt jetzt! – andeey