zoukankan      html  css  js  c++  java
  • [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 }
  • 相关阅读:
    poj 3616 Milking Time
    poj 3176 Cow Bowling
    poj 2229 Sumsets
    poj 2385 Apple Catching
    poj 3280 Cheapest Palindrome
    hdu 1530 Maximum Clique
    hdu 1102 Constructing Roads
    codeforces 592B The Monster and the Squirrel
    CDOJ 1221 Ancient Go
    hdu 1151 Air Raid(二分图最小路径覆盖)
  • 原文地址:https://www.cnblogs.com/strengthen/p/10229373.html
Copyright © 2011-2022 走看看