📅  最后修改于: 2023-12-03 14:50:36.589000             🧑  作者: Mango
在 Swift 中,可以使用 GCDAsyncUdpSocket
框架来创建 UDP 数据包的收发器。下面是一个简单的示例。
首先,需要在项目中引入 CocoaAsyncSocket
框架。可以手动下载并拖拽至工程中,或使用 CocoaPods 进行依赖管理。
pod 'CocoaAsyncSocket'
import CocoaAsyncSocket
class ViewController: NSViewController, GCDAsyncUdpSocketDelegate {
var udpSocket: GCDAsyncUdpSocket!
override func viewDidLoad() {
super.viewDidLoad()
udpSocket = GCDAsyncUdpSocket(delegate: self, delegateQueue: DispatchQueue.main)
do {
try udpSocket.bind(toPort: 8888)
try udpSocket.beginReceiving()
} catch {
print("Error creating UDP receiver: \(error.localizedDescription)")
}
}
// MARK: - GCDAsyncUdpSocketDelegate
func udpSocket(_ sock: GCDAsyncUdpSocket, didReceive data: Data, fromAddress address: Data, withFilterContext filterContext: Any?) {
let message = String(data: data, encoding: .utf8) ?? "<unknown message>"
print("[Received] \(message)")
}
}
上面的代码创建了一个 UDP 接收器,并通过 port=8888 开放了一个监听端口。当 UDP 数据报来到时,就会调用 udpSocket(_:didReceive:fromAddress:withFilterContext:)
方法。
class ViewController: NSViewController, GCDAsyncUdpSocketDelegate {
var udpSocket: GCDAsyncUdpSocket!
override func viewDidLoad() {
// ...
}
// ...
func sendUDPMessage(message: String, toHost host: String, port: UInt16) {
let data = message.data(using: .utf8)!
udpSocket.send(data, toHost: host, port: port, withTimeout: -1, tag: 0)
print("[Sent] \(message)")
}
}
上面的代码创建了一个名为 sendUDPMessage
的方法,可以用来发送 UDP 数据包。
完成以上配置后,可以运行以下测试代码:
override func viewDidAppear() {
super.viewDidAppear()
DispatchQueue.global().asyncAfter(deadline: .now() + 1) {
self.sendUDPMessage(message: "Hello, world!", toHost: "localhost", port: 8888)
}
}
在一秒钟后,程序将会向本地(localhost)的 8888 端口发送一条数据报。