★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公众号:山青咏芝(shanqingyongzhi)
➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/)
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:https://www.cnblogs.com/strengthen/p/10229465.html
➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
请点击Socket客户端文章:[Swift通天遁地]四、网络和线程-(13)创建一个Socket客户端
本文将演示创建一个Socket(套接字)服务端,并实现和客户端通讯。
网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。
在Github中下载项目:【SwiftSocket】
在【Source】文件夹,按下【Shift】选择多个文件。
【yudpsocket.c】
【ytcpsocket.c】
【UDPClient.swift】
【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】将运行的模拟器上的服务器切换至后台运行。