★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公衆號:山青詠芝(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】將運行的模擬器上的服務器切換至後臺運行。