2016-11-15 3 views
1

unten ist der Code, den ich habe.IOS Stream Einfrieren, wenn nicht swift 3

Es funktioniert perfekt, wenn die IP des Servers korrekt ist, aber in einem Fall, in dem die IP nicht korrekt ist, friert die App ein, sobald es versucht, die Nachricht zu senden, und wenn das auskommentiert ist, dann erneut beim Versuch bekommen.

Ich muss etwas installieren, um den Benutzer zu informieren, dass die IP falsch ist, und nicht die App einfrieren.

Ich habe einen Switch-Fall versucht, habe ich versucht zu überprüfen .hasBytesAvailable und .hasSpaceAvailable, die beide falsch zurückgeben, wie auch ein paar andere Vorschläge im Netz. Wenn jemand Hilfe anbieten kann, wäre das großartig.

Oh nur ein FYI das ist alles in Swift 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! 

     } 
    } 

Antwort

0

Sie asynchrone Kommunikation durch die Implementierung stream`s Delegat verwenden sollten. Weitere Informationen finden Sie unter Stream Programming Guide (Apple-Dokumentation).