YazdanSwiftSocket 0.1.9

YazdanSwiftSocket 0.1.9

测试已测试
语言语言 SwiftSwift
许可 BSD-3-Clause
发布最后发布2022年5月
SPM支持 SPM

Yazdan.xyz 维护。



YazdanSwiftSocket

CocoaPods Compatible CocoaPods Platforms Carthage Compatible

YazdanSwiftSocket 库提供了一个易于使用的界面,用于在服务端或客户端创建基于套接字的连接。支持 TCP 和 UDP 套接字。

安装

CocoaPods

将以下内容添加到您的 Podfile

pod 'YazdanSwiftSocket'

然后运行 pod install

Carthage

github "yazdanv/YazdanSwiftSocket"

代码示例

创建客户端套接字

// Create a socket connect to www.apple.com and port at 80
let client = TCPClient(address: "www.apple.com", port: 80)

带超时连接

您也可以设置为-1或空参数(client.connect())以关闭连接超时。

 switch client.connect(timeout: 1.0) {
   case .success:
     // Connection successful 🎉
   case .failure(let error):
     // 💩
 }

发送数据

let data: Data = // ... Bytes you want to send
let result = client.send(data: data)

读取数据

var data = client.read(1024*10) //return optional [Int8]

读取到特定分隔符之前的字符串

if let string = client.readString(until: "delimiter") {
    print(string) //the data from socket up until "delimiter"
}

读取所有传入的字符串

client.onMessage {msg in
    print(msg)              //Reads all the incoming data and when there is no more incoming data it will convert it into string, then calls this closure with the string
}

关闭套接字

client.close()

客户端套接字示例

let client = TCPClient(address: "www.apple.com", port: 80)
switch client.connect(timeout: 1.5) {
  case .success:
    client.onMessage {msg in
        print(msg)
    }
    client.send(string: "GET / HTTP/1.0\n\n" )
  case .failure(let error):
    print(error)
}

服务器套接字示例(回显服务器)

func echoService(client: TCPClient) {
    print("Newclient from:\(client.address)[\(client.port)]")
    var d = client.read(1024*10)
    client.send(data: d!)
    client.close()
}

func testServer() {
    let server = TCPServer(address: "127.0.0.1", port: 8080)
    switch server.listen() {
      case .success:
        while true {
            if var client = server.accept() {
                echoService(client: client)
            } else {
                print("accept error")
            }
        }
      case .failure(let error):
        print(error)
    }
}