• [Swift通天遁地]四、网络和线程-(13)创建一个Socket客户端


    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
    ➤微信公众号:山青咏芝(shanqingyongzhi)
    ➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/
    ➤GitHub地址:https://github.com/strengthen/LeetCode
    ➤原文地址:https://www.cnblogs.com/strengthen/p/10229373.html 
    ➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
    ➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

    目录:[Swift]通天遁地Swift

    请点击Socket服务端文章:[Swift通天遁地]四、网络和线程-(14)创建一个Socket服务端

    本文将演示Socket(套接字)客户端的使用。

    网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。

    在Github中下载项目:【SwiftSocket】

    在【Source】文件夹,按下【Shift】选择多个文件。

    【yudpsocket.c】

    【ytcpsocket.c】

    【UDPClient.swift】

    【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,  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 }
  • 相关阅读:
    《如何快速阅读一本书》读书笔记总结(实测,对提升阅读速度和质量非常有用)---2020年的第8/100本 (一目十行读书训练法)
    穷查理宝典 读书笔记--2020年的第1/100本
    200个查理芒格思维模型---多元思维模型
    lintcode算法周竞赛
    2016 Google code jam 大赛
    程序员面试心得总结
    (lintcode全部题目解答之)(附容易犯的错误)
    模板
    《非连续性》 混沌大学商学院第3章 读书笔记总结--2020年的第19/100本
    《第二曲线》 混沌大学商学院第2章 读书笔记总结--2020年的第18/100本
  • 原文地址:https://www.cnblogs.com/strengthen/p/10229373.html
Copyright © 2020-2023  润新知