swift - 从 Android 服务器获取照片到 iOS

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

                    }
                } 
            }
        }

最佳答案

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

关于swift - 从 Android 服务器获取照片到 iOS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39747932/

相关文章:

iOS swift : Open Mail app in inbox emails

swift - 何时在 SWIFT 中使用线程进行 UI 更新

c++ - 从 C++ 应用程序启动 Linux 服务时避免套接字继承

Java 客户端/服务器 SSL 套接字聊天

C# 异步服务器/客户端架构

swift 并发: Why Task is not executed on other background thread

swift - 如何在 Tomcat 上部署 Kitura 生成的服务器端 Swift 构建

c# - 使用套接字 C# 的 POST 请求

java - 套接字打开和关闭 1 秒或保持打开

java - 如何在 android 环境中使用 jersey client api?