Обнаружение всех доступных широковещательных адресов сети в Java

Для своего проекта я хотел получить список всех доступных широковещательных адресов, чтобы я мог транслировать запрос, а другое мое приложение, расположенное на другом компьютере в неуказанной сети, отвечало и получало список, который я (теперь использую небольшую модифицированную версию с участием Майка) придумал следующее:


private ArrayList<InetAddress> getBroadcastAddresses() {
        ArrayList<InetAddress> listOfBroadcasts = new ArrayList();
        Enumeration list;
        try {
            list = NetworkInterface.getNetworkInterfaces();

            while(list.hasMoreElements()) {
                NetworkInterface iface = (NetworkInterface) list.nextElement();

                if(iface == null) continue;

                if(!iface.isLoopback() && iface.isUp()) {
                    System.out.println("Found non-loopback, up interface:" + iface);

                    Iterator it = iface.getInterfaceAddresses().iterator();
                    while (it.hasNext()) {
                        InterfaceAddress address = (InterfaceAddress) it.next();

                        System.out.println("Found address: " + address);

                        if(address == null) continue;
                        InetAddress broadcast = address.getBroadcast();
                        if(broadcast != null) listOfBroadcasts.add(broadcast);
                    }
                }
            }
        } catch (SocketException ex) {
            return new ArrayList<InetAddress>();
        }

        return site;
}

Он довольно хорошо работает для обычной локальной сети, однако, когда дело доходит до локальной сети Wi-Fi, он просто пропускает второй цикл while после одного шага из-за того, что адрес равен нулю даже несмотря на то, что когда я использовал System.out.println (interfaceItem) только для просмотра, какие интерфейсы проходят через, он написал имя беспроводной локальной сети и мой IP-адрес, соответствующий сети.

РЕДАКТИРОВАТЬ 1: Это - результат, где 172.16.1.104 - мой IP-адрес в беспроводной сети. Проблема появляется ТОЛЬКО на моем ноутбуке с Wi-Fi. Вывод из моего ноутбука, где я в основном использую беспроводную связь, а иногда использую UTP для связи с моим другом. На моем ноутбуке также есть один сетевой интерфейс VirtualBox.

Не могли бы вы мне сказать, что с этим не так? Спасибо!

Примечание: Получается, что это может быть проблема, в частности, для моей записной книжки, а код работает для всех в целом, мне нравятся такие проблемы :-) Для меня это тупик, но все равно спасибо за помощь : -)

До сих пор люблю тебя! ; -)

15
задан 13 revs 20 February 2011 в 01:24
поделиться