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

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公众号:山青咏芝(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】将运行的模拟器上的服务器切换至后台运行。

相关文章
相关标签/搜索