Уведомление об изменении состояния сети, когда назначенный IP-адрес совпадает - PullRequest
0 голосов
/ 19 февраля 2019

Мне нужно отслеживать, изменилась ли сетевая IP-среда устройства.

Я посмотрел Swift - Получить WIFI IP-адрес устройства

Я не обязательно хочуТолько IP-адрес WiFi, но любой сетевой IP-адрес, с которым он может общаться (включая сотовый).

Однако существует угловой случай: когда внутренние (не внешне маршрутизируемые) адреса, такие как 192.168.xx, становятся дубликатами,но в разных подсетях.

Чтобы было понятно, домашняя сеть дома А дает мне 192.168.1.10;когда я присоединяюсь к другой домашней сети, скажем, Дом B, домашняя сеть дома B также может назначить мне 192.168.1.10.

В этом случае, как я могу отслеживать, что среда изменилась с тем же IP-адресом?

1 Ответ

0 голосов
/ 20 февраля 2019

Если вы на самом деле не заботитесь об IP-адресе, я бы посоветовал вам использовать NWPathMonitor - вы можете использовать это для вызова замыкания при изменении доступных сетевых интерфейсов.

Я проверил его сдва разных SSID на моем Wi-Fi (устройство получает один и тот же IP-адрес на обоих, поскольку это одна и та же сеть, лежащая в основе обоих SSID), и оно сообщает об изменении пути при переходе с одного на другой.

class ViewController: UIViewController {

    private var pathMonitor: NWPathMonitor!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        self.pathMonitor = NWPathMonitor()

        self.pathMonitor.pathUpdateHandler = newPath

        self.pathMonitor.start(queue: DispatchQueue.global())
    }

    func newPath(_ newPath: NWPath) -> Void {
        print("Network path changed")       
        print("Is expensive - \(newPath.isExpensive)")
    }
}
...