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を使わない?ポイント使用方法を調べます)
初期化導入フレーム クライアントsocketメンバー変数 を定義する.初期化clientSocket viewDidLoadメソッドで初期化動作 を行う.
接続の開始
サーバ側のIPアドレスとポート番号を取得すると、接続の確立が開始されます.(IPアドレスとポート番号はユーザーにインタフェースに入力させ、詳細な例は私が書いたdemoを表示することができます)
接続解除
接続が切断された場合、disconnectメソッドが呼び出されます.コードは次のとおりです.
メッセージを送る
接続に成功すると、サーバにメッセージを送信できます.サンプルコードは次のとおりです.
コールバック-接続成功
サーバへの接続に成功した後、接続に成功したコールバックメソッドでサーバに関する情報を取得できます.サンプルコードは次のとおりです.
コールバック-メッセージを受信
サーバからのメッセージを受信すると、メッセージを受信するコールバックメソッドで処理できます.サンプルコードは次のとおりです.
コールバック-接続解除
サーバがクライアントとの接続を切断した場合、接続を切断するコールバックメソッドで処理できます.サンプルコードは次のとおりです.
効果
demoを実行して効果を表示できます.
一般的に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
var clientSocket: GCDAsyncSocket! // socket
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を実行して効果を表示できます.