[Swift通天遁地]4、網絡和線程-(13)建立一個Socket客戶端

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公衆號:山青詠芝(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 }
相關文章
相關標籤/搜索