0

我有一个模块,我必须通过向 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 委托方法中显示错误

错误域=NSPOSIXErrorDomain 代码=65 “没有到主机的路由” UserInfo={NSLocalizedDescription=没有到主机的路由,NSLocalizedFailureReason=send() 函数中的错误。}

首先为什么我会得到这个错误,有没有其他方法可以实现这个结果。

编辑 :

尝试运行此代码,我正在尝试从连接到同一路由器的设备获取响应。要查找设备 IP,我使用上面的代码。但是套接字有时会关闭,有时它会工作,有时它不会,我无法找到关闭它的解决方案。

谢谢

4

1 回答 1

0

广播消息被发送到网络或子网上的所有主机,并通过将 IP 地址的节点部分设置为全 1 来创建。

您收到的错误消息与广播消息不通过路由器这一事实有关。

为了能够广播数据报,底层套接字必须处于广播模式。man setsockopt在您的终端中运行以供进一步参考。

于 2018-12-13T10:27:34.030 回答