|
0 / 0 / 0
Регистрация: 08.08.2014
Сообщений: 8
|
|||||||||||
Список хостов локальной сети, или как синхронизировать?08.08.2014, 10:45. Показов 2402. Ответов 9
Метки нет (Все метки)
Читающим привет!
Пишу небольшое сетевое приложение (ну как пишу - продираюсь через дебри) Возникла необходимость построить список доступных хостов, получилось вот что
Первая нашлась, когда я еще не использовала пинг и пользовалась методом класса InetAddress - isReachable, появляются жуткие задержки, приходится тормозить потоки на 5-6сек. Реально количество найденных онлайн зависит от Thread.sleep(); весьма. При задержке в 3 секунды конечно находит большинство, но елки не всех! и даже на 1 подсеть это 5-10 минут поиска. Вторая обнаружилась, потому что забыла закомментировать
Кстати перебор адресов пингом можно пройти в 1 потоке чтобы не мучаться с синхронизацией, но тоже долго выходит. Можно ли решить задачу не используя ping как таковой? Куда копать товарисчи?
0
|
|||||||||||
| 08.08.2014, 10:45 | |
|
Ответы с готовыми решениями:
9
Определить диапазон используемых адресов хостов локальной сети Как получить список IP-адресов или имён хостов некоторого сетевого домена? |
|
0 / 0 / 0
Регистрация: 08.08.2014
Сообщений: 8
|
|||||||||||
| 14.08.2014, 12:21 [ТС] | |||||||||||
|
Ответ кстати элементарный, нашла таки сама.
Дело в объявлении переменной address, должно быть
Пока оставлю как есть, дело свое этот класс делает, но тему закрывать рано, все-таки не слишком это изящный способ, спамить пингами. Должно быть нормальное взрослое решение.
0
|
|||||||||||
|
|
|
| 14.08.2014, 12:36 | |
|
Ksyuhen, Вы сделали неправильный вывод. synchronized отлично работает и без указания volatile.
Основная проблема в том, что вы читаете переменную address через гонку. Мне не понятно, зачем вы используете Thread.sleep вообще? Для ожидания завершения потока проще (и правильней) использовать метод Thread.join Если вы вызовите Thread.join для всех запущенных потоков и уберёте volatile - всё будет работать.
0
|
|
|
0 / 0 / 0
Регистрация: 08.08.2014
Сообщений: 8
|
||||||||
| 14.08.2014, 15:41 [ТС] | ||||||||
Thread.join попробовала использовать, как вы посоветовали, действительно работает без volatile и выдает тот же результат, но получается медленнее и начала проскакивать ошибка
А в стартовой у меня были проблемы с ожиданием отработки метода isReadable, ничего лучше sleep на тот момент, к сожалению, в голову не пришло.
0
|
||||||||
|
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
|
||||||
| 14.08.2014, 16:16 | ||||||
|
не совсем в тему, но
можно запускать пинги не по 4 пакета по умолчанию и не ждать по 1000 мс пока вернется ответ, а сделать так
w время ожидания ответа в мс
1
|
||||||
|
0 / 0 / 0
Регистрация: 08.08.2014
Сообщений: 8
|
||||||
| 14.08.2014, 16:46 [ТС] | ||||||
|
Паблито, спасибо, здорово ускоряет процесс.
С ошибкой про недостаточно памяти разобралась, просто неверно употребила join() (да и такое бывает ). Сейчас это работает вот здесь
0
|
||||||
|
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
|
||||||
| 14.08.2014, 17:16 | ||||||
|
Я не в курсе что там реально за задача, но когда у меня возникает необходимость быстро просканировать всю подсеть, то я делаю примерно так:
Во-первых так проще, из командного окна будет "прилетать" текст только если хост доступен. Во-вторых на русском виндовсе ответ будет совсем другим. Для локальной сети, я думаю, задержку можно поставить и в 50мс или даже меньше, это же не WAN. То есть эта строка будет показывать нам только те хосты, которые доступны. И останется проблема, как быть с хостами, которые не отвечают на ICMP пакеты намеренно. И забыл сказать, это все в одной Thread
0
|
||||||
|
|
||
| 14.08.2014, 18:25 | ||
|
Ksyuhen, Вам надо вызвать join - вне цикла. Иначе смысла от потоков очень не много.
Вообще я бы порекомендовал вам использовать Concurrent коллекции, например ConcurrentLinkedQueue, вместо этих плясок с synchronized и volatile
1
|
||
|
0 / 0 / 0
Регистрация: 08.08.2014
Сообщений: 8
|
||||
| 14.08.2014, 19:05 [ТС] | ||||
|
0
|
||||
|
|
|
| 14.08.2014, 19:36 | |
|
Ksyuhen, Сохраните ваши Thread в каком-нибудь списке. А после основного цикла добавьте еще один цикл, в котором будуте перебирать элементы этого списка и вызывать join().
0
|
|
| 14.08.2014, 19:36 | |
|
Помогаю со студенческими работами здесь
10
Как вытянуть список компьютеров из локальной сети? Как получить список всех компов в локальной сети? Как получить список всех IP-адресов из локальной сети? Как узнать имя или ip адрес атакующего по локальной сети? Гейт или как дать доступ с другого диапазона локальной сети Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым.
Но восстановить их можно так.
Для этого понадобится консольная утилита. . .
|
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
|
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
|
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11
— это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
|
|
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11
Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
|
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
|
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/
O1rJuneU_ls
https:/ / vkvideo. ru/ video-115721503_456239114
|
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ВВЕДЕНИЕ
Введу сокращения:
аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
|