[Swift通天遁地]四、网络和线程-(14)创建一个Socket服务端

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公众号:山青咏芝(shanqingyongzhi)
➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:https://www.cnblogs.com/strengthen/p/10229465.html 
➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

目录:[Swift]通天遁地Swift

请点击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】将运行的模拟器上的服务器切换至后台运行。

原文地址:https://www.cnblogs.com/strengthen/p/10229465.html