我有一个模块,必须通过向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代码= 65“没有路由到主机” UserInfo = {NSLocalizedDescription =没有路由到主机,NSLocalizedFailureReason = send()函数出错。}
首先,为什么会出现此错误,有没有其他方法可以实现此结果。
编辑:
尝试运行此代码,我试图从连接到同一路由器的设备获得响应。要查找设备IP,我正在使用上面的代码。但是套接字有时会关闭,有时会起作用,有时我无法找到为什么关闭的解决方案。
谢谢
答案 0 :(得分:0)
广播消息发送到网络或子网中的所有主机,并且是通过将IP地址的节点部分设置为全1来创建的。
您收到的错误消息与以下事实有关:广播消息不会通过路由器。
要能够广播数据报,底层套接字必须处于广播模式。在您的终端中运行man setsockopt
,以获取更多参考。