【Swift】CocoaAsyncSocket-UDP

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
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值