2012-07-04 2 views
0

У меня есть следующий фрагмент кода, который проверяет, открыт ли порт 443 на данном хосте.Как ускорить сканирование портов 443 в Java

import java.net.*; 
import java.io.IOException; 

public class Scan { 

    public static void main (String[] args) { 
     String host="put hostname here"; 
     int port=443; 

     try{ 
      Socket s = new Socket(host,port); 
      System.out.println("Can listen on port "+port+ 
         " in host "+host+" is open"); 

     } //end try 
     catch (IOException ex) 
     { 
      //remote host is not listening on port 443 
      System.out.println("Can not listen on port "+port+ 
         " of host "+host); 
     } //end catch 
    } 
} 

Мой вопрос: Если порт 443 не открыт в определенном хозяине, это делает мою программу очень медленно, так как мне нужно, чтобы проверить группу хостов. Есть ли способ улучшить код, чтобы ускорить сканирование порта 443, одновременно сохраняя надежность? Есть ли способы использования java-программирования для сканирования портов, кроме использования сокетов?

Пожалуйста, не проверяйте, что проверка перед сканированием не поможет, поскольку имена хостов, которые у меня подключены, мне нужно только проверить, открыт или закрыт порт 443.

+2

Возможный дубликат [Установить таймаут для сокета] (http://stackoverflow.com/questions/4969760/set-timeout-for-socket) – assylias

+0

На самом деле не точный дубликат, моя ошибка. Вы можете сканировать разные хосты в разных потоках (то есть параллельно). – assylias

ответ

2

Если вам нужно отсканировать группу хостов, просто запустите каждую проверку в отдельном потоке. Это позволит убедиться, что один хост не мешает вам обращаться с другими.

Длительные и независимые операции ввода-вывода - это классическая утилита для многопоточности. Вам даже не нужно беспокоиться о количестве процессоров на вашем компьютере, потому что они практически ничего не будут делать, ожидая ответа сети. Добавление тайм-аута, как это было предложено другими, также является разумным дополнением и может использоваться в дополнение к многопоточности.

+0

Также добавьте тайм-аут. Если вы знаете, что серверы должны отвечать в течение, скажем, 20 секунд, нет необходимости ждать дольше. – carlspring

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