★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公衆號:山青詠芝(shanqingyongzhi)
➤博客園地址:山青詠芝(https://www.cnblogs.com/strengthen/)
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:http://www.javashuo.com/article/p-zfvciaum-kx.html
➤若是連接不是山青詠芝的博客園地址,則多是爬取做者的文章。
➤原文已修改更新!強烈建議點擊原文地址閱讀!支持做者!支持原創!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★html
目錄:[Swift]通天遁地Swiftgit
請點擊Socket服務端文章:[Swift通天遁地]4、網絡和線程-(14)建立一個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 13 //初始化一個按鈕控件,當點擊該按鈕時,向服務器端發送數據。 14 let bt2 = UIButton(type: UIButtonType.roundedRect) 15 //設置按鈕在頁面中的顯示區域 16 bt2.frame = CGRect(x: 20, y: 180, width: 280, height: 44) 17 //設置按鈕的背景顏色 18 bt2.backgroundColor = UIColor.orange 19 //設置按鈕的前景顏色 20 bt2.tintColor = UIColor.white 21 //設置按鈕在正常狀態下的標題文字 22 bt2.setTitle("client connect server", for: UIControlState()) 23 //給按鈕控件綁定點擊事件 24 bt2.addTarget(self, 25 action: #selector(ViewController.clientConnect(_:)), 26 for: UIControlEvents.touchUpInside) 27 28 //設置根視圖的背景顏色 29 self.view.backgroundColor = UIColor.orange 30 //將按鈕添加到根視圖 31 self.view.addSubview(bt2) 32 } 33 34 //添加一個方法,用來響應按鈕的點擊事件 35 func clientConnect(_ button:UIButton) 36 { 37 //初始化一個數據傳輸的客戶端對象,並指定IP地址和端口號。 38 let client:TCPClient = TCPClient(addr: "127.0.0.1", port: 8080) 39 //經過調用客戶端對象的鏈接方法,並設置超時的時限, 40 //經過一個元組,得到返回的結果 41 let (success, errmsg) = client.connect(timeout: 5) 42 //當鏈接成功以後 43 if success 44 { 45 //鏈接成功以後,調用客戶端對象的發送方法, 46 //向服務器發送一個字符串。 47 //一樣經過一個元組,存儲服務器返回的信息。 48 let (success, errmsg) = client.send(str:"AA BB CC DD" ) 49 //判斷是否發送成功 50 if success 51 { 52 //調用客戶端對象的讀取方法,從服務器讀取指定數量的內容。 53 let data = client.read(1024*10) 54 //對客戶端讀取的數據進行處理 55 if let d = data 56 { 57 //將數據按指定規則進行編碼,並轉換成字符串。 58 let xmlStr:String = String(bytes: d, encoding: String.Encoding.utf8)! 59 //建立一個警告窗口,設置相關參數。 60 let alert = UIAlertController(title: "Load data", //標題 61 message: xmlStr,//內容 62 preferredStyle: UIAlertControllerStyle.alert)//樣式 63 64 //添加一個警告動做的按鈕,當點擊該按鈕時,關閉彈出窗口。 65 let yes = UIAlertAction(title: "Yes", 66 style: UIAlertActionStyle.default, 67 handler: nil) 68 69 //將警告動做按鈕,添加到警告窗口中。 70 alert.addAction(yes) 71 //在當前的的視圖控制器打開警告窗口,以顯示來自服務器的信息。 72 self.present(alert, animated: true, completion: nil) 73 } 74 } 75 else 76 { 77 //當傳送數據失敗時,一樣使用警告窗口,顯示錯誤的信息。 78 let alert = UIAlertController(title: "Error", 79 message: errmsg, 80 preferredStyle: UIAlertControllerStyle.alert) 81 82 //添加一個警告動做的按鈕,當點擊該按鈕時,關閉彈出窗口。 83 let yes = UIAlertAction(title: "Yes", 84 style: UIAlertActionStyle.default, 85 handler: nil) 86 87 //將警告動做按鈕,添加到警告窗口中。 88 alert.addAction(yes) 89 //在當前的的視圖控制器打開警告窗口,以顯示來自服務器的信息。 90 self.present(alert, animated: true, completion: nil) 91 //在控制檯輸出錯誤信息 92 print(errmsg) 93 } 94 } 95 else 96 { 97 //處理客戶端鏈接服務器失敗的狀況 98 //當鏈接失敗時,一樣使用警告窗口,顯示錯誤的信息。 99 let alert = UIAlertController(title: "Error", 100 message: errmsg, 101 preferredStyle: UIAlertControllerStyle.alert) 102 103 //添加一個警告動做的按鈕,當點擊該按鈕時,關閉彈出窗口。 104 let yes = UIAlertAction(title: "Yes", 105 style: UIAlertActionStyle.default, 106 handler: nil) 107 108 //將警告動做按鈕,添加到警告窗口中。 109 alert.addAction(yes) 110 //在當前的的視圖控制器打開警告窗口,以顯示來自服務器的錯誤鏈接信息。 111 self.present(alert, animated: true, completion: nil) 112 //在控制檯輸出錯誤信息 113 print(errmsg) 114 } 115 } 116 117 override func didReceiveMemoryWarning() { 118 super.didReceiveMemoryWarning() 119 // Dispose of any resources that can be recreated. 120 } 121 }