2016-09-28 1 views
0

Je veux envoyer le fichier image du serveur android au client iOS. J'utilise le langage rapide et la programmation socket (ip-port). Il y a une connexion. J'envoie/j'obtiens des données de chaîne mais je ne peux pas obtenir le fichier d'image. Comment puis-je obtenir un fichier image sur le côté rapide?Obtenir la photo du serveur android à iOS

i want to make like this app

 if aStream == self.inputStream{ 
      var buffer: UInt8 = 0 
      var len: Int! 


      while (inputStream?.hasBytesAvailable != nil){ 
       len = inputStream?.read(&buffer, maxLength: 2048) 

       if len > 0{ 

        var output = NSData(bytes: &buffer, length: len) 

        if output != nil{ 

         var img = UIImage(data: output) //Error !!! 

        } 
       } 
      } 
     } 
+0

Pouvez-vous ajouter votre code actuel? –

+0

J'ai édité ma question. –

Répondre

0

InputStream ne peut pas prendre toutes les données à la fois; Vous devez donc ajouter les octets pendant l'itération avec un objet NSMutableData jusqu'à ce que la propriété hasBytesAvailable ait la valeur false. Ce qui signifie que vous n'avez plus d'octets, vous avez toutes les données d'image dont vous avez besoin. Le code ci-dessous est Swift 3.0 en passant.

var data = NSMutableData() 

fileprivate func handleIncomingMessage(_ stream:Stream) { 
    if stream === inputStream { 
     let bufferSize = 1024 
     var buffer = Array<UInt8>(repeating: 0, count: bufferSize)) 
     while(inputStream.hasBytesAvailable) { 
      let bytesRead = inputStream.read(&buffer, maxLength: bufferSize) 
      if bytesRead >= 0 { 
       data.append(&buffer, length: bytesRead) 
      }else { 
       if bytesRead == -1 { 
        //TODO: Server closed. 
        ITLog.info("Server closed") 
       } 
      } 
     } 

     // `NSMutableData` object now has valid image bytes. 
     // Create an UIImage with `data` object. 
     let image = UIImage(data: data) 
     clearSocketData() 

    } 
} 

fileprivate func clearSocketData() { 
    data = NSMutableData() 
}