GCDAsyncUdpSocket Socket закрывается между отправкой 255 пакетов
У меня есть модуль, который я должен обнаружить, отправив пакеты на 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 Code=65 "Нет маршрута к хосту" UserInfo={NSLocalizedDescription= Нет маршрута к хосту, NSLocalizedFailureReason= Ошибка в функции send().}
Во-первых, почему я получаю эту ошибку, есть ли альтернативный способ достижения этого результата.
РЕДАКТИРОВАТЬ:
Попробуйте запустить этот код, я пытаюсь получить ответ от устройства, подключенного к тому же маршрутизатору. Чтобы найти IP-адрес устройства, я использую приведенный выше код. Но сокет закрывается между ними, иногда он работает, а иногда нет, я не могу найти решение, почему он закрывается.
Спасибо
1 ответ
Широковещательное сообщение отправляется всем хостам в сети или подсети и создается путем установки части узла IP-адреса на все 1.
Полученное сообщение об ошибке связано с тем, что широковещательные сообщения не проходят через маршрутизаторы.
Чтобы иметь возможность транслировать дейтаграмму, базовый сокет должен находиться в режиме широковещания. Бежать man setsockopt
в вашем терминале для дальнейшего использования.