★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公众号:山青咏芝(shanqingyongzhi)
➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/)
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:http://www.javashuo.com/article/p-ovphxipf-kx.html
➤若是连接不是山青咏芝的博客园地址,则多是爬取做者的文章。
➤原文已修改更新!强烈建议点击原文地址阅读!支持做者!支持原创!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★html
目录:[Swift]通天遁地Swiftgit
请点击Socket客户端文章:[Swift通天遁地]4、网络和线程-(13)建立一个Socket客户端github
本文将演示建立一个Socket(套接字)服务端,并实现和客户端通信。swift
网络上的两个程序经过一个双向的通讯链接实现数据的交换,这个链接的一端称为一个socket。服务器
在Github中下载项目:【SwiftSocket】微信
在【Source】文件夹,按下【Shift】选择多个文件。网络
【yudpsocket.c】socket
【ytcpsocket.c】tcp
【UDPClient.swift】ide
【TCPClient.swift】
【SwiftSocket.h】
将选择的文件拖动到项目中。点击【Finish】确认文件的导入。
在项目导航区,打开视图控制器的代码文件【ViewController.swift】。
如今开始编写代码,实现Socket服务器端,并实现和客户端通信。
1 import UIKit 2 //在当前的类文件中,引入已经安装的第三方类库 3 import Foundation 4 //导入须要用到的文件 5 import Darwin.C 6 7 class ViewController: UIViewController { 8 9 override func viewDidLoad() { 10 super.viewDidLoad() 11 // Do any additional setup after loading the view, typically from a nib. 12 //建立服务器端口的Socket(套接字) 13 testserver() 14 } 15 16 //添加一个方法,用来向客户端输出相关的数据 17 func echoService(client c:TCPClient) 18 { 19 //在控制台输出客户端地址和端口 20 print("newclient from:\(c.addr)[\(c.port)]") 21 //读取从客户端传递来的数据 22 let data = c.read(1024*10) 23 24 //判断是否为nil 25 if let d = data 26 { 27 //将数据进行编码,并转换成字符串 28 let result:String = String(bytes: d, encoding: String.Encoding.utf8)! 29 //将结果在控制台输出 30 print(result) 31 } 32 33 //建立一份数据,做为服务器端向客户端返回的数据 34 let responseData = "Hello".data(using: .utf8) 35 //向客户端发送数据 36 let _ = c.send(data: responseData!) 37 //最后关闭客户端口的链接 38 let _ = c.close() 39 } 40 41 //添加一个方法,用来建立服务器端口的Socket(套接字)。 42 func testserver() 43 { 44 //初始化一个Socket(套接字)的服务器端对象, 45 //并设置和客户端相同的地址和端口 46 let server:TCPServer = TCPServer(addr: "127.0.0.1", port: 8080) 47 //调用服务器端对象的监听方法,开始监听客户端链接。 48 //经过一个元组,得到监听的结果 49 let (success, msg) = server.listen() 50 //判断得到客户端链接以后 51 if success 52 { 53 //建立一个无限循环,用来持续处理和客户端之间的会话。 54 while true 55 { 56 //接收从客户端发来的链接请求,并得到客户端对象。 57 if let client = server.accept() 58 { 59 //经过上文的方法,处理客户端发来的链接。 60 echoService(client: client) 61 } 62 else 63 { 64 //输出日志信息 65 print("accept error") 66 } 67 } 68 } 69 else 70 { 71 //输出日志信息 72 print(msg) 73 } 74 } 75 76 override func didReceiveMemoryWarning() { 77 super.didReceiveMemoryWarning() 78 // Dispose of any resources that can be recreated. 79 } 80 }
【Alt】+【Tab】切换至客户端项目所在的文件夹。启动客户端程序。启动服务端。
【Command】+【Alt】+【H】将运行的模拟器上的服务器切换至后台运行。