Swift中的非响应流委托

caf*_*ike 7 sockets netcat nsstream ios 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")
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

caf*_*ike 12

经过大量的试验和错误后,我终于意识到stream()函数不起作用只是因为此函数的签名不正确/已过时.

这是我正在使用的:

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

但它真的应该是:

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

这可能是从之前的Swift版本到Swift 3的语法转换.XCode编译器通常会检测过时的函数/语法,但遗憾的是没有捕获到这个.

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