美文网首页
swift network

swift network

作者: 倾倒的吞天壶 | 来源:发表于2018-04-27 10:22 被阅读17次

一. URLSession:

  1. 加载数据
    func sessionLoadData(){
        //创建URL对象
        let urlString = "http://hangge.com"
        let url = URL(string:urlString)
        //创建请求对象
        let request = URLRequest(url: url!)
        
        let session = URLSession.shared
        let dataTask = session.dataTask(with: request,
                                        completionHandler: {(data, response, error) -> Void in
                                            if error != nil{
                                                print(error.debugDescription)
                                            }else{
                                                let str = String(data: data!, encoding: String.Encoding.utf8)
                                                print(str)
                                            }
        }) as URLSessionTask
        
        //使用resume方法启动任务
        dataTask.resume()
    }
  1. 下载数据
    func sessionSimpleDownload(){
        //下载地址
        let url = URL(string: "http://hangge.com/blog/images/logo.png")
        //请求
        let request = URLRequest(url: url!)
        
        let session = URLSession.shared
        //下载任务
        let downloadTask = session.downloadTask(with: request,
                                                completionHandler: { (location:URL?, response:URLResponse?, error:Error?)
                                                    -> Void in
                                                    //输出下载文件原来的存放目录
                                                    print("location:\(location)")
                                                    //location位置转换
                                                    let locationPath = location!.path
                                                    //拷贝到用户目录
                                                    let documnets:String = NSHomeDirectory() + "/Documents/1.png"
                                                    //创建文件管理器
                                                    let fileManager = FileManager.default
                                                    try! fileManager.moveItem(atPath: locationPath, toPath: documnets)
                                                    print("new location:\(documnets)")
        })
        
        //使用resume方法启动任务
        downloadTask.resume()
    }


// 实时进度
  import UIKit
    
    class ViewController: UIViewController, URLSessionDownloadDelegate {
        
        private lazy var session:URLSession = {
            //只执行一次
            let config = URLSessionConfiguration.default
            let currentSession = URLSession(configuration: config, delegate: self,
                                            delegateQueue: nil)
            return currentSession
            
        }()
        
        override func viewDidLoad() {
            super.viewDidLoad()
            
            sessionSeniorDownload()
        }
        
        //下载文件
        func sessionSeniorDownload(){
            //下载地址
            let url = URL(string: "http://hangge.com/blog/images/logo.png")
            //请求
            let request = URLRequest(url: url!)
            
            //下载任务
            let downloadTask = session.downloadTask(with: request)
            
            //使用resume方法启动任务
            downloadTask.resume()
        }
        
        
        //下载代理方法,下载结束
        func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask,
                        didFinishDownloadingTo location: URL) {
            //下载结束
            print("下载结束")
            
            //输出下载文件原来的存放目录
            print("location:\(location)")
            //location位置转换
            let locationPath = location.path
            //拷贝到用户目录
            let documnets:String = NSHomeDirectory() + "/Documents/2.png"
            //创建文件管理器
            let fileManager = FileManager.default
            try! fileManager.moveItem(atPath: locationPath, toPath: documnets)
            print("new location:\(documnets)")
        }
        
        //下载代理方法,监听下载进度
        func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask,
                        didWriteData bytesWritten: Int64, totalBytesWritten: Int64,
                        totalBytesExpectedToWrite: Int64) {
            //获取进度
            let written:CGFloat = (CGFloat)(totalBytesWritten)
            let total:CGFloat = (CGFloat)(totalBytesExpectedToWrite)
            let pro:CGFloat = written/total
            print("下载进度:\(pro)")
        }
        
        //下载代理方法,下载偏移
        func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask,
                        didResumeAtOffset fileOffset: Int64, expectedTotalBytes: Int64) {
            //下载偏移,主要用于暂停续传
        }
        
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
        }
    }
  1. 上传数据
    func sessionUpload(){
        //上传地址
        let url = URL(string: "http://hangge.com/upload.php")
        //请求
        var request = URLRequest(url: url!, cachePolicy: .reloadIgnoringCacheData)
        request.httpMethod = "POST"
        
        let session = URLSession.shared
        
        //上传数据流
        let documents =  NSHomeDirectory() + "/Documents/1.png"
        let imgData = try! Data(contentsOf: URL(fileURLWithPath: documents))
        
        
        let uploadTask = session.uploadTask(with: request, from: imgData) {
            (data:Data?, response:URLResponse?, error:Error?) -> Void in
            //上传完毕后
            if error != nil{
                print(error)
            }else{
                let str = String(data: data!, encoding: String.Encoding.utf8)
                print("上传完毕:\(str)")
            }
        }
        
        //使用resume方法启动任务
        uploadTask.resume()
    }
  1. post
    class func sessionPost(urlString: String, completionHandler: @escaping (Data?, URLResponse?, Error?) -> Swift.Void){
        //创建URL对象
        let url = URL(string: urlString)
        //创建请求对象
        var request = URLRequest(url: url!)
        request.httpMethod = "POST"
        
        let session = URLSession.shared
        let dataTask = session.dataTask(with: request, completionHandler: completionHandler) as URLSessionTask
        //使用resume方法启动任务
        dataTask.resume()
        
    }

二. WebSocket

import UIKit
import Starscream

protocol MDWebSocketUtilsDelegate: NSObjectProtocol {
    //websocet连接成功
    func websocketDidConnect(socket: MDWebSocketUtils)
    
    //websocket连接失败
    func websocketDidDisconnect(socket: MDWebSocketUtils, error: Error?)
    
    //websocket接受文字信息
    func websocketDidReceiveMessage(socket: MDWebSocketUtils, text: String)
    
    //websocket接受二进制信息
    func websocketDidReceiveData(socket: MDWebSocketUtils, data: Data)
}

class MDWebSocketUtils: NSObject, WebSocketDelegate {
    var socket: WebSocket!
    weak var mdWebSocketUtilsDelegate: MDWebSocketUtilsDelegate?
    
    //单例
    class func getInstance() -> MDWebSocketUtils {
        return manager
    }
    
    static let manager: MDWebSocketUtils = {
        return MDWebSocketUtils()
    }()
    
    //MARK: 连接服务器
    func connect() {
        socket = WebSocket(url: URL(string: CommonConstants.WS_URL)!)
        socket.delegate = self
        socket.connect()
    }
    
    //MARK: 断开连接
    func disconnect(){
        socket.disconnect()
    }
    
    //MARK: WebSocketDelegate
    public func websocketDidConnect(socket: WebSocketClient) {
        mdWebSocketUtilsDelegate?.websocketDidConnect(socket: self)
    }
    
    public func websocketDidDisconnect(socket: WebSocketClient, error: Error?) {
        mdWebSocketUtilsDelegate?.websocketDidDisconnect(socket: self, error: error)
    }
    
    public func websocketDidReceiveMessage(socket: WebSocketClient, text: String) {
        mdWebSocketUtilsDelegate?.websocketDidReceiveMessage(socket: self, text: text)
    }
    
    public func websocketDidReceiveData(socket: WebSocketClient, data: Data) {
        mdWebSocketUtilsDelegate?.websocketDidReceiveData(socket: self, data: data)
    }

}

相关文章

网友评论

      本文标题:swift network

      本文链接:https://www.haomeiwen.com/subject/znqblftx.html