2016-11-24 2 views
1

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 
    } 
} 

Antwort

2

Ihr Gerät ist nicht kompatibel mit Stream-Methode von StreamDelegate. Sie müssen dies ändern:

func Strom (_ AStream: Strom, Griff eventcode: Stream.Event)

statt

func Strom (AStream: Strom, handle eventCode: Stream.Event

+0

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

Verwandte Themen