Руководство iOS CocoaAsyncSocket (версия Swift)

Ios Cocoaasyncsocket Tutorial



1176193-c85bb9307e3500ac.jpgSocket - это пакет для транспортного уровня TCP / IP.

Краткое описание:

  • Из-за потребностей недавних проектов вам нужно использовать Socket, поэтому я разобрался. В Интернете есть много теоретических знаний о Socket. Здесь нет необходимости говорить. В этой статье в основном используется библиотека CocoaAsyncSocket в среде Swift для реализации очень простого примера подключения Socket, чтобы помочь всем понять и использовать. (Великий Бог не распыляет, ха-ха)

1. Создайте проект Swift и импортируйте CocoaAsyncSocket с помощью Cocoapods.

1176193-e36c66a1bca6af34.png1. Создайте проект

Коко-моллюски:

use_frameworks! pod 'CocoaAsyncSocket'

2. Создайте интерфейс сервера и клиента.

  • Создайте серверный интерфейс и клиентский интерфейс отдельно с помощью панели вкладок




    1176193-5c5e9b00e0160d4d.pngИнтерфейс между сервером и клиентом
  • Создайте серверный и клиентский ViewController соответственно и свяжите соответствующее текстовое поле и кнопку



4. Сервер создает порт привязки сокета, настраивает мониторинг и отправляет сообщения.

  • ServerViewController
// // ServerViewController.swift // TestSocket // // Created by YYQ on 6/21/16. // Copyright © 2016 YYQ. All rights reserved. // import UIKit import CocoaAsyncSocket class ServerViewController: UIViewController { //port @IBOutlet weak var portTF: UITextField! //message @IBOutlet weak var msgTF: UITextField! //the message says @IBOutlet weak var infoTV: UITextView! / / socket reference of the server and client var serverSocket: GCDAsyncSocket? var clientSocket: GCDAsyncSocket? override func viewDidLoad() { super.viewDidLoad() } / / Add a hint content to InfoTextView func addText(text: String) { infoTV.text = infoTV.text.stringByAppendingFormat('%@ ', text) } ///Monitor @IBAction func listeningAct(sender: AnyObject) { serverSocket = GCDAsyncSocket(delegate: self, delegateQueue: dispatch_get_main_queue()) do { try serverSocket?.acceptOnPort(UInt16(portTF.text!)!) addText('listed successfully') }catch _ { addText('listing failed') } } ///Send @IBAction func sendAct(sender: AnyObject) { let data = msgTF.text?.dataUsingEncoding(NSUTF8StringEncoding) / / Write information to the client Timeout is set to -1 will not time out, tag as the same on both sides clientSocket?.writeData(data, withTimeout: -1, tag: 0) } } extension ServerViewController: GCDAsyncSocketDelegate { //Execute when a new Socket connection is received func socket(sock: GCDAsyncSocket!, didAcceptNewSocket newSocket: GCDAsyncSocket!) { addText('Connection succeeded') addText('connection address' + newSocket.connectedHost) addText('port number' + String(newSocket.connectedPort)) clientSocket = newSocket / / The first time to start reading Data clientSocket!.readDataWithTimeout(-1, tag: 0) } func socket(sock: GCDAsyncSocket!, didReadData data: NSData!, withTag tag: Int) { let message = String(data: data,encoding: NSUTF8StringEncoding) addText(message!) / / Ready to read Data again, in order to cycle read Data sock.readDataWithTimeout(-1, tag: 0) } }``` ######5. Clients create Sockets, set up connections, send messages, read, disconnect, etc. - ClientViewController ``` Swift // // ClientViewController.swift // TestSocket // // Created by YYQ on 6/21/16. // Copyright 2016 YYQ. All rights reserved. // import UIKit import CocoaAsyncSocket class ClientViewController: UIViewController { //IP address @IBOutlet weak var ipTF: UITextField! //port @IBOutlet weak var portTF: UITextField! //message @IBOutlet weak var msgTF: UITextField! //the message says @IBOutlet weak var infoTV: UITextView! var socket: GCDAsyncSocket? override func viewDidLoad() { super.viewDidLoad() } func addText(text: String) { infoTV.text = infoTV.text.stringByAppendingFormat('%@ ', text) } //Connect @IBAction func connectionAct(sender: AnyObject) { socket = GCDAsyncSocket(delegate: self, delegateQueue: dispatch_get_main_queue()) do { try socket?.connectToHost(ipTF.text, onPort: UInt16(portTF.text!)!) addText('Connection succeeded') }catch _ { addText('connection failed') } } // disconnect @IBAction func disconnectAct(sender: AnyObject) { socket?.disconnect() addText('disconnected') } //send @IBAction func sendMsgAct(sender: AnyObject) { socket?.writeData(msgTF.text?.dataUsingEncoding(NSUTF8StringEncoding), withTimeout: -1, tag: 0) } } extension ClientViewController: GCDAsyncSocketDelegate { func socket(sock: GCDAsyncSocket!, didConnectToHost host: String!, port: UInt16) { addText('Connection Server' + host) self.socket?.readDataWithTimeout(-1, tag: 0) } func socket(sock: GCDAsyncSocket!, didReadData data: NSData!, withTag tag: Int) { let msg = String(data: data, encoding: NSUTF8StringEncoding) addText(msg!) socket?.readDataWithTimeout(-1, tag: 0) } }

| Сервер | Клиент |
| ----- |: ----: | ---- |



| | |

Вывод:

Использование CocoaAsyncSocket по-прежнему очень интуитивно понятно и понятно. Вот простое введение. Я думаю, что для более глубокого понимания Socket, если есть время, лучше изучить базовую реализацию сокета. Любые вопросы приветствуются, присоединяйтесь к нам ~
Контакт :[электронная почта защищена]