iOS CocoaAsyncSocket 使用教程(Swift3

2017-03-24  本文已影响0人  家电维修技师

声明:原文链接(http://www.jianshu.com/p/65ea031ef49b)

*  对作者的文章稍微做了点修改


Socket就是对于传输层TCP/IP的封装

简述:

由于最近项目的需要,需要使用到Socket,所以就趁此整理了一下,网上对于Socket的理论知识有很多,这里就不必多说,此篇文章主要在Swift环境下使用CocoaAsyncSocket库,来实现一个非常简单的Socket连接的例子,帮助大家理解和使用.(大神勿喷呀,哈哈)

1.创建Swift工程,并使用Cocoapods导入CocoaAsyncSocket

1.创建工程

Cocoapods:

use_frameworks!

pod 'CocoaAsyncSocket'

2.搭建服务端和客户端UI

使用Tabbar分别创建服务端界面和客户端界面

服务端和客户端的界面搭建

分别创建服务端和客户端ViewController并关联相关Textfield 和 Button

4.服务端创建Socket绑定端口,设置监听,消息发送等方法

ServerViewController

importUIKit

importCocoaAsyncSocket

classServerViewController:UIViewController{

//端口

@IBOutletweakvarportTF:UITextField!

//消息

@IBOutletweakvarmsgTF:UITextField!

//信息显示

@IBOutletweakvarinfoTV:UITextView!

varserverSocket:GCDAsyncSocket?

varclientSocket:GCDAsyncSocket?

overridefuncviewDidLoad() {

super.viewDidLoad()

addText(text:"显示检测(服务端)")

}

//对InfoTextView添加提示内容

funcaddText(text:String) {

infoTV.text=infoTV.text.appendingFormat("%@\n", text)

}

//监听

@IBActionfunclisteningAct(_sender:Any) {

serverSocket = GCDAsyncSocket(delegate:self, delegateQueue:DispatchQueue.main)

do{

tryserverSocket?.accept(onPort:UInt16(portTF.text!)!)

addText(text:"监听成功")

}catch_{

addText(text:"监听失败")

}

}

//发送

@IBActionfuncsendAct(_sender:Any) {

letdata =msgTF.text?.data(using:String.Encoding.utf8)

//向客户端写入信息Timeout设置为-1则不会超时, tag作为两边一样的标示

clientSocket?.write(data!, withTimeout:-1, tag:0)

}

}

extensionServerViewController:GCDAsyncSocketDelegate{

//当接收到新的Socket连接时执行

funcsocket(_sock:GCDAsyncSocket, didAcceptNewSocket newSocket:GCDAsyncSocket) {

addText(text:"连接成功")

addText(text:"连接地址"+ newSocket.connectedHost!)

addText(text:"端口号"+String(newSocket.connectedPort))

clientSocket = newSocket

//第一次开始读取Data

clientSocket!.readData(withTimeout:-1, tag:0)

}

funcsocket(_sock:GCDAsyncSocket, didRead data:Data, withTag tag:Int) {

letmessage =String(data: data,encoding:String.Encoding.utf8)

addText(text: message!)

//再次准备读取Data,以此来循环读取Data

sock.readData(withTimeout:-1, tag:0)

}

}

5.客户端创建Socket,设置连接,消息发送,读取,断开连接等方法

ClientViewController

importUIKit

importCocoaAsyncSocket

classClientViewController:UIViewController{

// IP地址

@IBOutletweakvaripTF:UITextField!

//端口

@IBOutletweakvarportTF:UITextField!

//消息

@IBOutletweakvarmsgTF:UITextField!

//消息显示

@IBOutletweakvarinfoTV:UITextView!

varsocket:GCDAsyncSocket?

overridefuncviewDidLoad() {

super.viewDidLoad()

addText(text:"显示检测(客户端)")

}

funcaddText(text:String) {

infoTV.text=infoTV.text.appendingFormat("%@\n", text)

}

//连接

@IBActionfuncconnectionAct(_sender:Any) {

socket = GCDAsyncSocket(delegate:self, delegateQueue:DispatchQueue.main)

do{

trysocket?.connect(toHost: ipTF.text!, onPort:UInt16(portTF.text!)!)

addText(text:"连接成功")

}catch_{

addText(text:"连接失败")

}

}

//断开

@IBActionfuncdisconnectAct(_sender:Any) {

socket?.disconnect()

addText(text:"断开连接")

}

//发送

@IBActionfuncsendMsgAct(_sender:Any) {

socket?.write((msgTF.text?.data(using:String.Encoding.utf8))!, withTimeout:-1, tag:0)

}

}

extensionClientViewController:GCDAsyncSocketDelegate{

funcsocket(_sock:GCDAsyncSocket, didConnectToHost host:String, port:UInt16) {

addText(text:"连接服务器"+host)

self.socket?.readData(withTimeout:-1, tag:0)

}

funcsocket(_sock:GCDAsyncSocket, didRead data:Data, withTag tag:Int) {

letmsg =String(data: dataasData, encoding:String.Encoding.utf8)

addText(text: msg!)

socket?.readData(withTimeout:-1, tag:0)

}

}

上一篇下一篇

猜你喜欢

热点阅读