[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】將運行的模擬器上的服務器切換至後臺運行。

相關文章
相關標籤/搜索