Я пишу приложение для Android, где мне нужно общаться с компьютером в сети Wi-Fi. Весь код находится в java, а сеть wifi - это специальная сеть. Чтобы подключиться, я начинаю с отправки запроса имени широковещательной передачи NBNS для машины, с которой я хочу подключиться, с моего телефона. В большинстве случаев это работает как ожидалось (около 3 или 4 из 5 раз). Иногда, однако, запрос имени терпит неудачу. В любом случае, когда я отправляю запрос имени, сразу после того, как я вижу пакеты запросов имени на машине, с которой я пытаюсь подключиться (используя wirehark), я вижу, что ARP-запрос выглядит как ...Android-устройство игнорирует ARP-запросы
HonHaiPr_69: a0: 67 Трансляция ARP 42 Кто имеет 192.168.1.2? Tell 192.168.1.10
Это карта с компьютера, к которой я пытаюсь подключиться, чтобы узнать, у кого есть адрес моего телефона. В случае успеха, мой телефон послушно отвечает с ответом ARP ...
SamsungE_75: 46: BB HonHaiPr_69: a0: 67 ARP 42 192.168.1.2 находится в 98: 0C: 82: 75: 46: бб
Как только мой телефон ответит на запрос ARP, я могу продолжить работу и общаться с компьютером. Не удалось выполнить запрос имени, хотя эти запросы ARP, похоже, игнорируются моим телефоном. Я никогда не вижу ответа ARP, и запрос NBT, который я излагаю, приводит к отключению времени. Я пробовал каждую форму инициализации дейтаграммы/сокета, доступную мне в стандартных пакетах java, и ничего не помогает. Я исследовал запись собственных пакетов ответов arp, но из-за того, где находится стек ARP, мне нужно иметь доступ к мощным программам сокетов, что означает, что я должен запустить свой телефон. Это неприемлемое решение для меня, потому что я хочу, чтобы средний пользователь Android мог использовать это приложение, не делая ничего особенного для своего телефона или сети Wi-Fi. Если кто-то из вас испытал эту проблему раньше и решил ее, не могли бы вы сообщить мне магическую формулу? Заранее благодарим за любой вклад, который вы можете предложить.
Мне кажется, что это проблема с вашими сетевыми конфигурациями Android, а не с проблемой программирования. И учитывая, что у вас есть (понятно) исключение rooting устройства, проблема НЕ МОЖЕТ быть адресована в Java. –
Я боюсь, что это тоже заключение, к которому я начинаю. Если это так, это проблема с Android в целом, потому что это происходит на нескольких устройствах. Это также может быть проблемой с маршрутизатором, но я не знаю, почему иногда ARP-пакеты могли бы сделать это на телефоне, а иногда нет. – JSantoro