Swift中的无反应流委托



,所以我在Swift中使用插座玩耍,并试图将应用程序与服务器连接起来。我正在让应用程序连接到服务器的IP地址,并在服务器上使用netcat进行测试。在执行过程中,该应用程序的控制台输出显示它已成功连接到服务器。但是,流代表似乎没有响应。当我输入netcat时,应用程序控制台没有打印任何内容。我已经搜索了一段时间,发现我的实现与其他实施非常相似。也许我在这里缺少我看不到的东西。

任何对此问题的想法都将不胜感激!

代码附加在下面:

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

因此,在>许多试验和错误之后,我终于意识到流()函数不起作用,因为此函数的签名不正确/过时。

这是我正在使用的:

func stream(aStream: Stream, handleEvent eventCode: Stream.Event)

但实际上应该是:

func stream(_ aStream: Stream, handle eventCode: Stream.Event)

这可能是从以前的Swift版本到Swift 3的语法转换。

希望我的回答可以帮助那些仍在遭受这个问题的人。

最新更新