私はSwiftのソケットで遊んでいて、サーバーとアプリケーションを接続しようとしていました。私は、アプリケーションがサーバーのIPアドレスに接続していて、サーバー上でテスト用にnetcat
を使用していました。実行中、アプリケーションからのコンソール出力は、サーバーに正常に接続したことを示しました。ただし、ストリームデリゲートは反応しないようです。 netcat
に入力したとき、アプリコンソールは何も印刷しませんでした。私はかなり長い間検索してきました。私の実装は他のものとかなり似ています。多分私はここに見えない何かを見逃しています。Swiftの非応答ストリームデリート
この問題について考えていただければ幸いです。
コードを以下に添付されています
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")
}
}
}
アプリはサーバーに接続できたようですが、stream()関数はまったくトリガーされませんでした。 'inputStream.hasBytesAvailable'をチェックしたとき、' netcat'で何かを送った後、trueを返しました。私はこれがストリームデリゲートを適切に構成していないか、または実行ループかもしれないと考えていると思われます。 – cafemike