zoukankan      html  css  js  c++  java
  • [Swift通天遁地]四、网络和线程-(14)创建一个Socket服务端

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

    目录:[Swift]通天遁地Swift

    请点击Socket客户端文章:[Swift通天遁地]四、网络和线程-(13)创建一个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         //创建服务器端口的Socket(套接字)
    13         testserver()
    14     }
    15 
    16     //添加一个方法,用来向客户端输出相关的数据
    17     func echoService(client c:TCPClient)
    18     {
    19         //在控制台输出客户端地址和端口
    20         print("newclient from:(c.addr)[(c.port)]")
    21         //读取从客户端传递来的数据
    22         let data = c.read(1024*10)
    23         
    24         //判断是否为nil
    25         if let d = data
    26         {
    27             //将数据进行编码,并转换成字符串
    28             let result:String = String(bytes: d, encoding: String.Encoding.utf8)!
    29             //将结果在控制台输出
    30             print(result)
    31         }
    32         
    33         //创建一份数据,作为服务器端向客户端返回的数据
    34         let responseData = "Hello".data(using: .utf8)
    35         //向客户端发送数据
    36         let _ = c.send(data: responseData!)
    37         //最后关闭客户端口的连接
    38         let _ = c.close()
    39     }
    40     
    41     //添加一个方法,用来创建服务器端口的Socket(套接字)。
    42     func testserver()
    43     {
    44         //初始化一个Socket(套接字)的服务器端对象,
    45         //并设置和客户端相同的地址和端口
    46         let server:TCPServer = TCPServer(addr: "127.0.0.1", port: 8080)
    47         //调用服务器端对象的监听方法,开始监听客户端连接。
    48         //通过一个元组,获得监听的结果
    49         let (success, msg) = server.listen()
    50         //判断获得客户端连接之后
    51         if success
    52         {
    53             //创建一个无限循环,用来持续处理和客户端之间的会话。
    54             while true
    55             {
    56                 //接收从客户端发来的连接请求,并获得客户端对象。
    57                 if let client = server.accept()
    58                 {
    59                     //通过上文的方法,处理客户端发来的连接。
    60                     echoService(client: client)
    61                 }
    62                 else
    63                 {
    64                     //输出日志信息
    65                     print("accept error")
    66                 }
    67             }
    68         }
    69         else
    70         {
    71             //输出日志信息
    72             print(msg)
    73         }
    74     }
    75     
    76     override func didReceiveMemoryWarning() {
    77         super.didReceiveMemoryWarning()
    78         // Dispose of any resources that can be recreated.
    79     }
    80 }

    【Alt】+【Tab】切换至客户端项目所在的文件夹。启动客户端程序。启动服务端。

    【Command】+【Alt】+【H】将运行的模拟器上的服务器切换至后台运行。

  • 相关阅读:
    大数据用户画像方法与实践(干货 转帖)
    前端学习之路
    MySQL学习记录
    Linux 运维之路
    Python学习之路
    NgRx/Store 4 + Angular 5使用教程
    CSS实现各种形状
    CSS3实现背景透明,文字不透明
    CSS实现网页背景图片自适应全屏
    使用Restify+superagent做数据转发
  • 原文地址:https://www.cnblogs.com/strengthen/p/10229465.html
Copyright © 2011-2022 走看看