|
0 / 0 / 0
Регистрация: 08.08.2014
Сообщений: 8
|
|||||||||||
Список хостов локальной сети, или как синхронизировать?08.08.2014, 10:45. Показов 2398. Ответов 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 адрес атакующего по локальной сети? Гейт или как дать доступ с другого диапазона локальной сети Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ВВЕДЕНИЕ
Введу сокращения:
аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
|
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi
ветка по-частям.
коммит Create переделка под биомассу. txt
вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
|
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ *
Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях.
Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её.
Последовательность действий:. . .
|
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
|
|
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение.
И на уровне агентов добавится между грибами или бактериями взаимодействий.
До того я пробовал подход через многомерные массивы,. . .
|
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Налог на собак: https:/ / **********/ gallery/ V06K53e
Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf
Пост отсюда. . .
|
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop?
Ниже её машинный перевод.
После долгих разбирательств я наконец-то вернула себе. . .
|
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод
Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод.
Thinkpad X220 Tablet —. . .
|