从Android服务器获取照片到iOS

时间:2016-09-28 12:43:54

标签: swift sockets client nsdata

我想将图像文件从android服务器发送到iOS客户端。我正在使用swift语言和套接字编程(ip-port)。有联系。我发送/获取字符串数据,但我无法获取图像文件。我怎样才能快速获得图像文件?

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 !!!

                    }
                } 
            }
        }

1 个答案:

答案 0 :(得分:0)

InputStream无法一次获取所有数据;所以你需要在整个迭代过程中用NSMutableData对象追加字节,直到hasBytesAvailable属性为false。这意味着您没有剩余字节,您获得了所需的所有图像数据。顺便提一句下面的代码是Swift 3.0。

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()
}