Windows знает, когда вы удалили сетевой кабель из своей сетевой платы. Есть ли программный способ определить это через API в С++?
Примечание. Я не использую .NET, и это для закрытой локальной сети (не подключенной к Интернету когда-либо).
Ответ 1
Раймонд Чен в блоге о чем-то подобном недавно. Ниже приведена соответствующая документация. Я думаю, что флаг MIB_IPADDR_DISCONNECTED - это то, что вы ищете.
Вы можете зарегистрировать свое приложение для получения обратных вызовов, когда сети становятся подключенными/не подключенными.
Или вы можете получить список сетей, а затем проверить каждый из них, чтобы узнать, подключен ли компьютер к сети или нет.
Помните, что на компьютере с Windows часто будет установлено несколько сетей (Ethernet, Wi-Fi и т.д.)
Помните, что только потому, что сеть подключена, у вас может не быть доступа к Интернету. Например, у вас могут быть проблемы с DNS или маршрутизацией. Или вы можете быть в рабочей сети, которая не подключена к Интернету.
Из-за вышеизложенного многие диагностические инструменты также подключаются к "хорошо известному" интернет-серверу, если они хотят знать, связаны ли они или нет. Что-то вроде google.com - они тратят много денег, чтобы убедиться, что их сайт все время.
Наконец, вы также можете иметь ситуацию с полусвязью, когда пакеты проходят, но недостаточно, чтобы действительно разрешить потоки связи. Чтобы проверить это, не просто ping интернет-сайт, так как это будет только пара пакетов. Вместо этого откройте TCP-соединение или что-то большее, чем ping.