1
下記のコードは私が持っているコードです。swiftを接続しないとIOSストリームがフリーズする3
サーバのIPが正しいときには正常に動作しますが、ipが正しくない場合は、メッセージを送信しようとするとアプリがフリーズし、コメントアウトされていれば再度試行します受け取る。
私は、IPが間違っていることをユーザーに知らせるために、アプリケーションをフリーズしないようにする必要があります。
スイッチのケースを試しましたが、ネット上の他のいくつかの提案と同様に、両方ともfalseを返す.hasBytesAvailableと.hasSpaceAvailableのチェックを試みました。もし誰かが偉大な助けを提供することができれば。
ああはちょうどFYIこれはあなたがstream`s実装するデリゲートでの非同期通信を使用する必要があり、すべてのスウィフト3
import UIKit
import Foundation
class SocketTest{
var output: NSString?
func SocketWorks(test: String) -> NSString{
output = "Hello"
let CDIP = CoreDataUDP()
let serverIP = CDIP.getIP()
var server = serverIP
var port = 5000
//var host :NSHost = NSHost(address: server)
var inp :InputStream?
var out :OutputStream?
Stream.getStreamsToHost(withName: server, port: port, inputStream: &inp, outputStream: &out)
let inputStream = inp!
let outputStream = out!
inputStream.open()
defer {
inputStream.close()
}
outputStream.open()
defer {
outputStream.close()
}
let messageSend: String = test
let messageSendCount = messageSend.characters.count
outputStream.write(messageSend, maxLength: messageSendCount)
let bufferSize = 1024
var buffer = Array<UInt8>(repeating: 0, count: bufferSize)
let bytesRead = inputStream.read(&buffer, maxLength: bufferSize)
if bytesRead >= 0 {
output = NSString(bytes: &buffer, length: bytesRead, encoding: String.Encoding.utf8.rawValue)
} else {
NSLog("Its not right yet", output!)
}
print(output!)
return output!
}
}