Swift 3でStreamDelegateでJavaソケットに接続する際に問題があります。現在、このコードが魅力的に動作する大きなObjective Cプロジェクトを書き直し中ですしかし、私はSwift 3で動作させることができないようです。私が抱えている問題は、ストリーム機能が決して動作しないことです。だから "ストリーム!"決してプリントアウトされません。 self.outputStream.open()
が呼び出された後のStream.Status
は1(開封)です。コードは問題なく実行され、「スレッドでストリームを開く:」が呼び出されます。Swift 3入力ストリームと出力ストリームが接続されていますがストリームがありません
私が接続しようとしているソケットは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
}
}
ありがとう、Hoa!このエラーは私には起こりませんでした。私はこのようなものをクリーンアップするのに慣れています。完全に今! – andeey