2016-11-15 7 views
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! 

     } 
    } 

答えて

関連する問題