在发送255个数据包之间,GCDAsyncUdpSocket套接字关闭

时间:2018-12-12 12:46:59

标签: swift sockets gcdasyncudpsocket

我有一个模块,必须通过向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,我正在使用上面的代码。但是套接字有时会关闭,有时会起作用,有时我无法找到为什么关闭的解决方案。

谢谢

1 个答案:

答案 0 :(得分:0)

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

您收到的错误消息与以下事实有关:广播消息不会通过路由器。

要能够广播数据报,底层套接字必须处于广播模式。在您的终端中运行man setsockopt,以获取更多参考。