CocoaAsyncSocketを使用してiOS上でsocket接続(swift 4)を構築する方法を教えてくれます.クライアント

2850 ワード

前言
一般的にiOS開発はTCP接続についてあまり知られておらず、普段のプロジェクトでは使えない場合は、研究することもありません.急にこの方面の需要があって、手がつけられないと感じます.今日はCocoaAsyncSocketフレームワークを使用してsocket接続のクライアントを構築する方法について説明します.
CocoaAsyncSocketフレームワークはiOS開発者が開発時にTCP/UDP接続を確立するのに便利なフレームワークで、githubには10 k近くのstarがあります.一般的に開発時にこのフレームワークが使われます.
SocketClientDemoをgithubにアップロードしたと書きました.本文の中のコードもこのdemoから来て、starは重要ではありませんて、楽しくて最も重要です.ははは.
クライアントが作成されると、サーバ側に接続できます.ここのサーバ側は、同じCocoaAsyncSocketで作成してもよいし、同じローカルエリアネットワーク内のスマートハードウェアであってもよい.
CocoaAsyncSocketのインストール
CocoaAsyncSocketはgithubで既にインストール方法を紹介しており、Objective-CもSwiftも使用可能です.私が使っているのはCocoaPods方式です.(CocoaPodsを使わない?ポイント使用方法を調べます)
初期化
  • 導入フレームimport CocoaAsyncSocket
  • クライアントsocketメンバー変数var clientSocket: GCDAsyncSocket! // socket
  • を定義する.
  • 初期化clientSocket viewDidLoadメソッドで初期化動作clientSocket = GCDAsyncSocket(delegate: self, delegateQueue: DispatchQueue.main)
  • を行う.
    接続の開始
    サーバ側のIPアドレスとポート番号を取得すると、接続の確立が開始されます.(IPアドレスとポート番号はユーザーにインタフェースに入力させ、詳細な例は私が書いたdemoを表示することができます)
    func startConnect(){
            
        view.endEditing(true)
            
        do {
            try clientSocket.connect(toHost: addressTF.text!, onPort: UInt16(portF.text!)!, withTimeout: -1)
            showMessage("    ")
        } catch {
            showMessage("    ")
        }
    }
    

    接続解除
    接続が切断された場合、disconnectメソッドが呼び出されます.コードは次のとおりです.
    func stopConnect() {
            
        clientSocket.disconnect()
        showMessage("    ")
    }
    

    メッセージを送る
    接続に成功すると、サーバにメッセージを送信できます.サンプルコードは次のとおりです.
    func sendMessage() {
            
        view.endEditing(true)
            
        let data = messageTF.text?.data(using: .utf8)
            
        // timeout -1:    ,   
        // tag:     
        clientSocket.write(data!, withTimeout: -1, tag: 0)
    }
    

    コールバック-接続成功
    サーバへの接続に成功した後、接続に成功したコールバックメソッドでサーバに関する情報を取得できます.サンプルコードは次のとおりです.
    func socket(_ sock: GCDAsyncSocket, didConnectToHost host: String, port: UInt16) {
            
        showMessage("    ")
            
        let address = "   IP:" + "\(host)"
            
        showMessage(address)
            
        clientSocket.readData(withTimeout: -1, tag: 0)
    }
    

    コールバック-メッセージを受信
    サーバからのメッセージを受信すると、メッセージを受信するコールバックメソッドで処理できます.サンプルコードは次のとおりです.
    //      
    func socket(_ sock: GCDAsyncSocket, didRead data: Data, withTag tag: Int) {
                
        let text = String(data: data, encoding: .utf8)
                
        showMessage(text!)
                
        clientSocket.readData(withTimeout: -1, tag: 0)
    }
    

    コールバック-接続解除
    サーバがクライアントとの接続を切断した場合、接続を切断するコールバックメソッドで処理できます.サンプルコードは次のとおりです.
    func socketDidDisconnect(_ sock: GCDAsyncSocket, withError err: Error?) {
            
        showMessage("     -----")
    }
    

    効果
    demoを実行して効果を表示できます.