Что самый быстрый путь состоит в том, чтобы обнаружить недостижимый хост в Java?

Это способ достичь того, что вы хотите делать без numpy:

def print_non_0_len_ge_1(li):
    """removes 0 from front/back of line, prints rest of line if > 1 consecutive letter
    splitting at 0 between words."""
    for line in li:
        no_zero = ''.join(line).strip("0").split("0")
        for p in no_zero:
            if len(p)>1:
                print(*p,sep="\n")
                print("")   

data = [['0', '0', '0', '0', '0', '0', '0', '0', '0', '0'], 
        ['0', '0', '0', 'E', 'A', 'G', 'L', 'E', '0', '0'], 
        ['0', '0', '0', '0', 'P', '0', '0', '0', '0', '0'], 
        ['0', '0', '0', '0', 'P', '0', 'P', '0', '0', '0'],
        ['0', '0', '0', '0', 'L', '0', 'I', '0', '0', '0'], 
        ['0', '0', '0', 'C', 'E', 'R', 'E', 'A', 'L', '0'],
        ['0', '0', '0', '0', '0', '0', '0', '0', '0', '0']]

# apply to lines
print_non_0_len_ge_1(data)

# apply to transposed data to get the columns
print_non_0_len_ge_1(zip(*data))  

Вывод:

E
A
G
L
E

C
E
R
E
A
L

A
P
P
L
E

P
I
E

Вы можете решить это аналогично, если используете numpy - просто удалить начальный / конечный 0, разделить на 0 и применить к нормальным и транспонированным данным.

У этого метода есть недостаток - вам нужно 0 между любыми несловообразующими символами в обоих направлениях, чтобы позволить ему работать (вы не можете использовать «EGG», начальное объявление «(E) agle», потому что вы получаете [ 113] дважды от него.

11
задан grammar31 12 October 2008 в 05:12
поделиться

5 ответов

Если Вы хотите протестировать, можно ли соединиться с веб-сервером, Вы могли бы также создать URL на основе имени хоста и номера порта и использования, что для создания URLConnection проверка результата (включая исключения) метода подключения должна сказать Вам, достижим ли веб-сервер.

1
ответ дан 3 December 2019 в 11:21
поделиться

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

Принятие reachability/isReachable является Вашей реальной целью, Вы должны просто использовать простой сокет неблокирования IO как показано в средстве моделирования Ping Java, подключениях в качестве примера к сервису времени, но работали бы одинаково хорошо над 8 080.

5
ответ дан 3 December 2019 в 11:21
поделиться

Не уверенный, насколько практичный это.

Как насчет того, чтобы делать эквивалент traceroute (tracert на окнах) и после того как Вы получаете успех, можно продолжить двигаться.

В корпоративных сетях я видел, что ICMP (ping), заблокированный администраторами, НО обычно, tracert все еще, работает. Если можно выяснить быстрый способ сделать то, что делает tracert, который должен добиться цели?

Удачи!

0
ответ дан 3 December 2019 в 11:21
поделиться

Мое новое решение зависит с помощью a TimedSocket (исходный код) с тайм-аутом на 3 000 мс при выполнении подключения.

Синхронизации:

  • 1 406 мс: testLocalHost()
  • 5 280 мс: testLAN()

Не может даже заставить их работать правильно:

  • testNoDNS()
  • testHaveDNS()
0
ответ дан 3 December 2019 в 11:21
поделиться

Если бы необходимо сделать это с серьезно большим количеством хостов в очень краткий промежуток времени, я рассмотрел бы использование инструмента как fping вместо этого - выходят из оболочки должностному лицу он и анализируют вывод, когда это возвращается. fping выполняет большое количество параллельных запросов сразу, таким образом, Вы могли теоретически проверить несколько тысяч хостов через минуту (я думаю, что предел 4096?)

0
ответ дан 3 December 2019 в 11:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: