美文网首页iOS点点滴滴
基于CocoaAsyncSocket___TcpServer服务

基于CocoaAsyncSocket___TcpServer服务

作者: 279cb620c509 | 来源:发表于2019-02-21 17:08 被阅读0次

    CocoaAsyncSocket___TcpServer服务端

    //
    //  TcpServerManager.swift
    //  tcp-swift
    //
    //  Created by ma c on 2019/2/21.
    //  Copyright © 2019年 ma c. All rights reserved.
    //
    
    import Foundation
    import Foundation
    import CocoaAsyncSocket
    
    typealias ZZWTcpServerManagerBlock = (_ isconnection:Bool) -> Void
    
    typealias ZZWTcpServerManagerDidReceiveDataBlock = (_ receiveString:String) -> Void
    
    class TcpServerManager: NSObject {
    
        static let port:UInt16 = 12345
    
        var tcpServerManagerDidReceiveDataBlock:ZZWTcpServerManagerDidReceiveDataBlock?
        var tcpServerManagerBlock:ZZWTcpServerManagerBlock?
    
        static let shared = TcpServerManager()
        var  tcpServerManger:GCDAsyncSocket?
    
        var connectedSockets : NSMutableArray = NSMutableArray.init(capacity: 1)
    
    
        var sourcedata :Data   = Data(capacity: 0)
    
        static let tcpError:String = "tcp,error"
    
        var isReceiveData = false
    
        func setTcpSocketManager()  {
            tcpServerManger = GCDAsyncSocket(delegate: self , delegateQueue: DispatchQueue.global(qos: .default))
            tcpServerManger?.autoDisconnectOnClosedReadStream = false
        }
    
    
        func tryOpenTcpServer(_ tcpPort:UInt16 = port) ->  TcpServerManager{
    
            do{
              try tcpServerManger?.accept(onPort: tcpPort)
    
            }catch{
                print("catch:\(String(describing: TcpServerManager.tcpError))")
            }
            return self
        }
    
    
    
        func tcpSocketManagerBlockFunction(tcpSocketManagerB:@escaping ZZWTcpServerManagerBlock){
    
            tcpServerManagerBlock = tcpSocketManagerB
    
        }
    
        func tcpSocketDidReceiveDataBlockFunction(tcpSocketManagerB:@escaping ZZWTcpServerManagerDidReceiveDataBlock){
    
            tcpServerManagerDidReceiveDataBlock = tcpSocketManagerB
    
        }
    }
    
    extension TcpServerManager : GCDAsyncSocketDelegate{
    
        func socket(_ sock: GCDAsyncSocket, didWriteDataWithTag tag: Int) {
            sock.readData(withTimeout: -1, tag: 0)
        }
    
        func socket(_ sock: GCDAsyncSocket, didAcceptNewSocket newSocket: GCDAsyncSocket) {
    
            connectedSockets.add(newSocket)
            let host : String = newSocket.connectedHost!
            let port : UInt16 = newSocket.connectedPort
    
            print(String(format: "Accepted client %@:%hu", host, port))
    
            newSocket.readData(withTimeout: -1, tag: 0)
    
        }
    
        func socket(_ sock: GCDAsyncSocket, didRead data: Data, withTag tag: Int) {
            isReceiveData = true
            let recv = String(data: data , encoding:String.Encoding.utf8)
    
            self.tcpServerManagerDidReceiveDataBlock!(recv!)
    
            if (recv?.count)! > 0 {
    
                sock.write("Welcome!".data(using: String.Encoding.utf8)!, withTimeout: -1, tag: 0)
            }
    
            sock.readData(withTimeout: -1, tag: 0)
        }
    
    
    
    }
    

    使用:

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
            // Override point for customization after application launch.
            TcpServerManager.shared.setTcpSocketManager()
            return true
        }
    
    
    func startTCP()  {
            if !(TcpServerManager.shared.tcpServerManger?.isConnected)!{
                TcpServerManager.shared.tryOpenTcpServer()
                
                TcpServerManager.shared.tcpSocketDidReceiveDataBlockFunction {[weak self] (receiveString) in
    
                    DispatchQueue.main.async {
                        self?.layerText?.text   =  "/n" + "\(receiveString)"
                    }
    
                }
            }
        }
    

    相关文章

      网友评论

        本文标题:基于CocoaAsyncSocket___TcpServer服务

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