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

请点击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, 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 }

原文地址:https://www.cnblogs.com/strengthen/p/10229373.html

时间: 2024-11-10 11:41:06

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

[Swift通天遁地]九、拔剑吧-(13)创建页面的景深视差滚动效果

景深视差经常被应用在游戏项目中. 本文将演示创建一个简单的景深视差滚动效果 首先确保已经安装了所需的第三方类库.双击查看安装配置文件[Podfile] 1 platform :ios, '12.0' 2 use_frameworks! 3 4 target 'DemoApp' do 5 source 'https://github.com/CocoaPods/Specs.git' 6 pod 'Presentation' 7 end 根据配置文件中的相关设置,安装第三方类库. 安装完成之后,双击

[Swift通天遁地]四、网络和线程-(11)将服务器返回的JSON映射为实例对象

本文将演示使用第三方类库中,将服务器返回的JSON映射为实例对象. 首先确保在项目中已经安装了所需的第三方库. 点击[Podfile],查看安装配置文件. 1 platform :ios, ’12.0’ 2 use_frameworks! 3 4 target 'DemoApp' do 5 source 'https://github.com/CocoaPods/Specs.git' 6 pod 'Alamofire', '~> 4.0' 7 pod 'AlamofireObjectMapper

[Swift通天遁地]一、超级工具-(13)使用PKHUD制作各种动态提示窗口

首先确保在项目中已经安装了所需的第三方库. 点击[Podfile],查看安装配置文件. 1 platform :ios, '12.0' 2 use_frameworks! 3 4 target 'DemoApp' do 5 source 'https://github.com/CocoaPods/Specs.git' 6 pod 'PKHUD', '~> 4.0' 7 end 根据配置文件中的相关配置,安装第三方库. 然后点击打开[DemoApp.xcworkspace]项目文件. 在项目导航区

[Swift通天遁地]九、拔剑吧-(3)创建多种自定义Segment分段样式的控件

本文将演示创建多种自定义Segment分段样式的控件. 首先确保已经安装了所需的第三方类库.双击查看安装配置文件[Podfile] 1 platform :ios, '12.0' 2 use_frameworks! 3 4 target 'DemoApp' do 5 source 'https://github.com/CocoaPods/Specs.git' 6 pod 'PagingMenuController' 7 end 根据配置文件中的相关设置,安装第三方类库. 安装完成之后,双击打开

[Swift通天遁地]九、拔剑吧-(14)创建更美观的景深视差滚动效果

景深视差经常被应用在游戏项目中. 本文将演示创建更美观的景深视差滚动效果. 首先确保已经安装了所需的第三方类库.双击查看安装配置文件[Podfile] 1 platform :ios, '12.0' 2 use_frameworks! 3 4 target 'DemoApp' do 5 source 'https://github.com/CocoaPods/Specs.git' 6 pod 'Presentation' 7 end 根据配置文件中的相关设置,安装第三方类库. 安装完成之后,双击

[Swift通天遁地]九、拔剑吧-(7)创建旋转和弹性的页面切换效果

本文将演示使用第三方类库,创建旋转和弹性的页面切换效果. 首先确保已经安装了所需的第三方类库.双击查看安装配置文件[Podfile] 1 platform :ios, '12.0' 2 use_frameworks! 3 4 target 'DemoApp' do 5 source 'https://github.com/CocoaPods/Specs.git' 6 pod 'GuillotineMenu' 7 end 根据配置文件中的相关设置,安装第三方类库. 安装完成之后,双击打开项目文件[

[Swift通天遁地]九、拔剑吧-(8)创建气泡式页面切换效果

本文将演示使用第三方类库,创建页面之间的气泡式切换效果. 首先确保已经安装了所需的第三方类库.双击查看安装配置文件[Podfile] 1 platform :ios, '12.0' 2 use_frameworks! 3 4 target 'DemoApp' do 5 source 'https://github.com/CocoaPods/Specs.git' 6 pod 'BubbleTransition' 7 end 根据配置文件中的相关设置,安装第三方类库. 安装完成之后,双击打开项目文

[Swift通天遁地]九、拔剑吧-(9)创建支持缩放、移动、裁切的相机视图控制器

本文将演示创建支持缩放.移动.裁切的相机视图控制器. 首先确保已经安装了所需的第三方类库.双击查看安装配置文件[Podfile] 1 platform :ios, '12.0' 2 use_frameworks! 3 4 target 'DemoApp' do 5 source 'https://github.com/CocoaPods/Specs.git' 6 pod "ALCameraViewController" 7 end 根据配置文件中的相关设置,安装第三方类库. 安装完成之

[Swift通天遁地]九、拔剑吧-(12)创建Preview-Transition图像预览界面

本文将演示如何创建一个漂亮的图像预览界面. 首先确保已经安装了所需的第三方类库.双击查看安装配置文件[Podfile] 1 platform :ios, ‘12.0’ 2 use_frameworks! 3 4 target 'DemoApp' do 5 source 'https://github.com/CocoaPods/Specs.git' 6 pod "PreviewTransition" 7 end 根据配置文件中的相关设置,安装第三方类库. 安装完成之后,双击打开项目文件