2011-11-28 3 views
5

내 네트워크에 서로 다른 IP 주소를 가진 5 개의 장치가 있습니다. 이 장치에 연결하고 네트워크에서 TCP/IP 소켓을 통해 데이터를 가져 오려고합니다. 자바에서 사용할 수 있는지 어떻게 확인할 수 있습니까? 그냥 호스트가 있는지 여부를 확인하려면Java에서 IP가 살아 있는지 확인하려면 어떻게합니까?

public void setUpConnection() { 
    try { 
     Socket client = new Socket(hostIp, hostPort); 
     socketReader = client.getInputStream(); 
     socketWriter = new PrintWriter(client.getOutputStream()); 
    } catch (UnknownHostException e) { 
     System.out.println("Error setting up socket connection: unknown host at " + hostIp); 
     System.out.println("host: " + hostIp + "port: " + hostPort); 
    } catch (IOException e) { 
     System.out.println("Error setting up socket connection: " + e); 
     System.out.println("host: " + hostIp + "port:" + hostPort); 
    } 
} 
+0

당신은 소켓이 해당 포트를 사용할 수 있는지 확인하려면 각 호스트에 연결 열 수 있습니다. –

답변

15
InetAddress.getByName(host).isReachable(timeOut); 

또한 참조 here

1

, 당신은 두 가지 방법이 기본적으로 순수 자바를 들어 isReachable

1

를 사용할 수 있습니다

  1. 활성 : 예를 들어 모든 포트와 루프를 반복합니다. 호스트의 모든 바운드 IP 주소

  2. 수동태 : 미리 정의 된 포트에서 작은 서버를 실행하고 다른 포트는 사용 가능할 때 스스로를 등록합니다.

isReachable은 문서에 명시된 바와 같이 여러 가지 이유로 실패 할 수 있습니다.

+0

다음은 내 기기의 호스트 및 포트입니다. 1- 192.168.30.190:3001 2- 192.168.30.191:3001 3- 192.168.30.192:3001 4- 192.168.30.193:3001 5- 192.168.30.194 : 3001 패시브 방식의 샘플? – michdraft

+0

장치 구성이 수정 세트 인 경우, 예를 들어 각 장치에 대한 시간 초과로 연결을 시도하는 스레드를 작성하십시오. 다른 모든 설정 (호스트/ip/포트 감지)의 경우 순수한 Java가 네트워크 계층에 도달하지 않아 깨끗한 방법으로 DHCP 서버가 필요합니다. – PeterMmm

0

TCP/IP는 핸드 셰이 킹 모드입니다. 이 5 개의 장치 중 하나와 연결하십시오. 클라이언트와 수신자 클라이언트가 모두 살아 있어야합니다. 가능한 경우 먼저 소켓 NIO을 사용하십시오. 클라이언트 로직을 작성하여 클라이언트가 온라인 상태가 될 때마다 먼저 데이터베이스에 ip 및 port 항목을 만들고 데이터베이스에서 다른 사용 가능한 ip 및 포트를 가져 와서 연결을 시도하도록 클라이언트 논리를 작성할 수 있습니까? 모든 클라이언트 장치가 도달 할 수 없을 때마다 데이터베이스에서 해당 항목을 삭제하십시오. 예 : 첫 번째 장치가 온라인 상태가되면 두 번째 장치가 온라인 상태 일 때 databae에 하나의 항목 만 있기 때문에 하나의 소켓 만 만들어집니다 두 항목이 하나이며이 장치의 IP와 포트가 두 번째 항목은 먼저 온 장치.

감사 선일 쿠마르 Sahoo는

+0

좋은가요? 그것에 중계 할 수 있습니까? public boolean hostAvailabilityCheck() { boolean available = true; { (새 소켓 (호스트, 포트)). 시도해보십시오(); } catch (UnknownHostException e) { // 알 수없는 호스트 available = false; } catch (IOException e) { // io 예외, 서비스가 실행되고 있지 않음 available = false; } 반품 가능; } – michdraft

+0

예, 우리는 다음과 같이 처리했습니다. –

관련 문제