【问题标题】:Swift 3 inputstream and outputstream connecting but no streamSwift 3输入流和输出流连接但没有流
【发布时间】:2016-11-24 14:38:47
【问题描述】:

我在使用 Swift 3 中的 StreamDelegate 连接到 Java 套接字时遇到问题。我目前正在重写一个大型的 Objective C 项目,其中这段代码运行起来就像一个魅力,但我似乎不能能够让它在 Swift 3 中工作。我遇到的问题是流函数永远不会运行。所以“流!”永远不会打印出来。调用self.outputStream.open() 之后的Stream.Status 是1(打开)。代码运行没有任何问题,并且“在线程上打开流:”被调用。

我尝试连接的套接字是 Java 套接字。

注意:我遇到过调试器打印出一条消息,说没有附加处理程序,但我不知道它是否相关。

我发现了几个类似的帖子,但不是关于这个确切的问题。如果有人有任何想法,我很乐意听到他们的声音!感谢任何试图提供帮助的人。

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

【问题讨论】:

    标签: ios swift


    【解决方案1】:

    您的实现与 StreamDelegate 的流方法不兼容。 你必须改成这样:

    func stream(_aStream:Stream,handle eventCode:Stream.Event)

    而不是

    func 流(aStream:Stream,handleEvent eventCode:Stream.Event

    【讨论】:

    • 谢谢你,呵呵!这个错误我从来没有发生过。我习惯于编译器清理这样的东西。现在完美运行!
    猜你喜欢
    • 2010-12-07
    • 1970-01-01
    • 2012-09-06
    • 2019-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-06
    相关资源
    最近更新 更多