【发布时间】:2018-12-12 12:46:59
【问题描述】:
我有一个模块,我必须通过向 255 个 IP 地址发送数据包来发现该模块。 例如。已连接 IP:192.188.2.1 然后我必须发送一个更改最后一个值的数据包,即
var HOST = "192.188.2.1"
var arr = HOST.components(separatedBy: ".")
for i in 1 ..< 254
{
dispatchGroup.enter()
time += 0.005
DispatchQueue.main.asyncAfter(deadline: .now() + time) {
let obj = LPScanPacket()
arr[3] = "\(i)"
let str = arr.joined(separator: ".")
SenderWrapper.sendLPPacket(lpPacket: obj, HOST: str)
dispatchGroup.leave()
}
}
dispatchGroup.notify(queue: .main) {
print("Completed sending ????")
}
但是在发送这么多数据包时,它会在 udpSocketDidClose 委托方法中显示错误
Error Domain=NSPOSIXErrorDomain Code=65 "No route to host" UserInfo={NSLocalizedDescription=No route to host, NSLocalizedFailureReason=在 send() 函数中出错。}
首先我为什么会收到这个错误,有没有其他方法可以实现这个结果。
编辑:
尝试运行此代码,我正在尝试从连接到同一路由器的设备获取响应。要查找设备 IP,我使用上面的代码。但是套接字有时会关闭,有时它会工作,有时它不会关闭。我无法找到关闭它的解决方案。
谢谢
【问题讨论】:
-
尝试将间隔减少到 254..
-
但我需要的输出是从 1 到 255。
-
你知道192.188.2.255是广播地址吗?广播地址是连接到多路访问通信网络的所有设备都能够接收数据报的网络地址。发送到广播地址的消息可能会被所有网络连接的主机接收。
标签: swift sockets gcdasyncudpsocket