美文网首页
iOS CocoaAsyncSocket 使用教程(Swift3

iOS CocoaAsyncSocket 使用教程(Swift3

作者: 家电维修技师 | 来源:发表于2017-03-24 08:47 被阅读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)

    }

    }

    相关文章

      网友评论

          本文标题:iOS CocoaAsyncSocket 使用教程(Swift3

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