import CocoaAsyncSocket
class NetworkTool: NSObject {
/// UDP
private lazy var udp: GCDAsyncUdpSocket = {
return GCDAsyncUdpSocket(delegate: self, delegateQueue: .main)
}()
/// udp广播查找设备
func udpBroadcast() {
self.udpBroadcast(ip: "255.255.255.255")
}
/// 指定设备发送广播
func udpBroadcast(ip: String) {
self.udpDefalut()
self.boardDeviceInfo(ip: ip)
}
/// deviceInfo
func boardDeviceInfo(ip: String) {
var data = Data()//得发送data才能得到回应,这个根据交互方案传值
self.udp.send(Data(data), toHost: ip, port: self.udpPort, withTimeout: self.udpTimeOut, tag: 0)
}
/// UDP 默认设置
func udpDefalut() {
if self.udp.localPort() != self.udpPort {//self.udpPort为当前绑定的端口,判断是否已经绑定过
do {
try self.udp.bind(toPort: self.udpPort)
} catch _ {
NSLog("udp绑定失败")
}
}
do {
try self.udp.enableBroadcast(true)
} catch _ {
NSLog("无法广播")
}
do {
try self.udp.beginReceiving()
} catch _ {
NSLog("无法开启接收")
}
}
/// 暂停广播
func udpPauseReceiving() {
self.udp.pauseReceiving()
}
}
// MARK: - UDP
extension NetworkTool: GCDAsyncUdpSocketDelegate {
// 广播
func udpSocket(_ sock: GCDAsyncUdpSocket, didReceive data: Data, fromAddress address: Data, withFilterContext filterContext: Any?) {
//因为根据端口广播可能会搜索到非目标设备,所以根据UDP发送的data来获取相应的回应,根据receiveData来筛选ip
let ip = GCDAsyncUdpSocket.host(fromAddress: address)!
let port = GCDAsyncUdpSocket.port(fromAddress: address)
print(ip, port)
//处理data
}
}
【Swift】CocoaAsyncSocket-UDP
最新推荐文章于 2024-08-16 09:24:45 发布