Also spielte ich in Swift mit Sockets herum und versuchte, die App mit meinem Server zu verbinden. Ich ließ die App mit der IP-Adresse des Servers verbinden und verwendete netcat
auf dem Server zum Testen. Während der Ausführung zeigte die Konsolenausgabe von der App, dass sie erfolgreich mit dem Server verbunden war. Der Streamdelegate scheint jedoch nicht zu reagieren. Als ich in netcat
tippte, druckte die App-Konsole nichts. Ich habe lange gesucht und festgestellt, dass meine Implementierung sehr ähnlich zu anderen ist. Vielleicht vermisse ich hier etwas, das ich nicht sehe.Non-responsive Stream Delegate in Swift
Jeder Gedanke zu diesem Problem würde sehr geschätzt werden!
-Code ist unten angehängt:
import UIKit
class ViewController: UIViewController, StreamDelegate {
let addr:String = "52.34.56.78"
let port:Int = 1234
var inputStream: InputStream?
var outputStream: OutputStream?
override func viewDidLoad() {
super.viewDidLoad()
self.connect(host: addr, port: port)
}
func connect(host: String, port: Int) {
Stream.getStreamsToHost(withName: host, port: port, inputStream: &inputStream, outputStream: &outputStream)
if inputStream != nil && outputStream != nil {
inputStream!.delegate = self
outputStream!.delegate = self
inputStream!.schedule(in: RunLoop.main, forMode: RunLoopMode.defaultRunLoopMode)
outputStream!.schedule(in: RunLoop.main, forMode: RunLoopMode.defaultRunLoopMode)
inputStream!.open()
outputStream!.open()
print("successfully connected")
}
else {
print("connection unsuccessful")
}
}
func stream(aStream: Stream, handleEvent eventCode: Stream.Event) {
if aStream === inputStream {
switch eventCode {
case Stream.Event.errorOccurred:
print("input: ErrorOccurred: \(aStream.streamError?.localizedDescription)")
break
case Stream.Event.openCompleted:
print("input: OpenCompleted")
break
case Stream.Event.hasBytesAvailable:
print("input: HasBytesAvailable")
break
default:
break
}
}
else {
print("unknown stuff happened")
}
}
}
So scheint es, als ob die App eine Verbindung zum Server herstellen konnte, aber die Funktion stream() wurde überhaupt nicht ausgelöst. Als ich nach 'inputStream.hasBytesAvailable' gesucht habe, wurde 'TrueStream.hasBytesAvailable' zurückgegeben, nachdem ich etwas über' netcat' gesendet habe. Ich vermute, dass dies etwas damit zu tun hat, den Streamdelegaten oder vielleicht die Laufschleife nicht richtig zu konfigurieren. – cafemike