2016-06-18 2 views
0

Я пишу код, который отправляет/получает информацию с компьютеров, подключенных к той же сети. У меня есть метод, который получает IP-адрес онлайн-компьютеров в тот момент, но мне нужно обновить список, когда появляется или исчезает новый IP-адрес.Автоматически обновлять список IP-адресов, подключенных к Java

Я не думаю, что есть нить и while (true) вызов метода - лучшее решение. И я не могу придумать ничего другого - никаких предложений?

Вот пример кода, который я использую для поиска активных компьютеров в сети:

public List<String> searchApps() { 
    List<AddressServiceTypePair> ip = this.networkController.getDiscovered(); //returns an ArrayList<AddressServiceTypePair> 

    onlineApps.clear(); 
    for (AddressServiceTypePair service : ip) { 
     onlineApps.add(service); 
    } 

    List<String> list = new ArrayList<>(); 
    for (AddressServiceTypePair aux : onlineApps) { 
     list.add(aux.getIP()); 
    } 
    return list; 
} 
+0

Вы можете опросить себя или, возможно, добавить слушателя где-нибудь. – Jeroen

ответ

1

трудно обобщать на основе нечеткого образца кода публикуемую. Тем не менее, я предполагаю, что вы пишете какой-то тип клиентского и серверного кода. Нет простого способа получить уведомление о добавленном/удаленном компьютере в сети. Я был бы удивлен, если бы вам понадобился список IP-адресов . Вы можете поместить свой IP-метод обнаружения в бесконечный цикл и просто включить Thread.sleep(milliseconds); в свой цикл.

Если вам действительно нужна самая свежая информация, вы можете подключить каждый подключенный компьютер к гнезду на другом порту в отдельном потоке, а затем попытаться прочитать из Socket - таким образом вы получите исключение как только Socket закрывается. Вы можете добавить IP-адрес клиента, когда сокет будет создан, и ваш блок catch может обновить список активных IP-адресов, когда Socket закрывается, сигнализируя, что клиент больше не подключен.

+0

Я думаю, вы правы! Я просто поставлю ip disconvering в цикле true с Thread.sleep (1000) - (может быть, не 1000) .... 1 секунду его достаточно, никто не замечает его разницы. Мне просто нужно обратить внимание на производительность – Joseph

+0

Просто еще одна вещь, если мне нужно поместить список ip в jlist, мне нужно создать другой поток с тем же временем сна, что и поток для поиска IP для отображения в jlist с для ... правильно? – Joseph

+0

Я бы просто обновил JList как часть того же цикла while. –

Смежные вопросы