Моему приложению для Windows Mobile (написанному на C # с компактной платформой) необходимо знать, активна ли конкретная машина.
Для достижения этой цели я подумал использовать механизм пинга. Я попытался использовать класс Ping, реализованный в платформе opennetcf (класс System.Net.NetworkInformation.Ping для .NET Framework не является частью компактной платформы).
Поскольку я назначаю функции Ping.Send имя хоста, она сначала пытается разрешить это имя хоста и получить IP-адрес.
Но я наблюдаю следующую проблему:
Если первое разрешение DNS не удается (потому что сеть в данный момент не работает), и если приложение немедленно пытается снова отправить эхо-запрос, оно тоже не может работать, даже если сеть больше не работает.
Я проверил с известным анализатором сетевых протоколов и увидел, что отправляются только запросы, касающиеся первого разрешения DNS. Запросы на разрешение dns второго пинга не отправляются.
Почему второй DNS-запрос не отправлен?
Есть ли механизм DNS-кэша на таких устройствах Windows Mobile?
Если да, может ли этот механизм быть сброшен программно?
РЕДАКТИРОВАТЬ: Я отказался от поиска решения для этого сброса DNS.
Я решил пинговать IP-адрес вместо имени машины.
Проблема проверки связи с IP-адресом с жестко закодированным адресом заключается в том, что мы должны быть на 100% уверены, что этот IP-адрес не изменится.
IP-адрес шлюза можно использовать, потому что он всегда доступен (если нет, это означает, что сеть не работает).