2012-10-04 5 views
0

내 서브넷에서 IP 범위를 검색하고 싶습니다. 특정 포트에서 수신되는 IP 주소를 저장하고 싶습니다. 가 빨리 방법이 있나요 ...포트 x에서 수신 대기하는 IP 주소를 찾는 방법

 for (int host = 1; host < 255; host++) { 
      String ip = networkAddress + host; 

      Socket socket; 
      try { 
       socket = new Socket(ip, port); 
       System.out.println(ip + " +"); 
       serverList.add(ip); 
       socket.close(); 
      } 
      catch (Exception e) { 
       System.out.println(ip + " -"); 
      } 
     } 

하지만 내 문제는 너무 많은 시간을 소요한다는 것입니다 :이 코드를 사용?

답변

1

다중 스테이징을 사용하십시오. 대부분의 시간은 실제로 응답을 기다리는 데 소비되므로 100 개 (또는 심지어 200 개)의 스레드를 안전하게 생성 할 수 있으므로 총 시간이 2 배 정도 단축됩니다. Executors 클래스를 사용하여 스레드 풀을 만들고 각 호스트마다 하나의 작업을 제출하십시오.

serverList 컬렉션은 스레드로부터 안전해야한다는 것을 기억하십시오. 결과를 기다리려면 shutdown()awaitTermination() 쌍을 사용하십시오. 또는 CompletionService을 사용하여 도착한 결과를 수집하십시오.

0

new Socket() (인수 없음)을 사용하고 Socket.connect()을 짧은 시간 제한 (예 : 몇 초)으로 호출하십시오.

관련 문제