2015-01-30 2 views
2

내가 만든 작은 자바 게임의 경우 동일한 (가정용) 네트워크에있는 두 대의 컴퓨터에서 재생할 수 있기를 원합니다. RMI를 사용하고 192.168.2.3의 ipaddress에서 컴퓨터를 사용해 보려고합니다. 192.168.2.6의 다른 컴퓨터에서이 ipaddress의 레지스트리를 검색 할 수는 있지만 컴퓨터가 연결된 네트워크의 모든 ipaddresses 목록을 표시하고 싶습니다. 그들이 실제로 게임을 호스트하는 경우에만 가능합니다. 네트워크에있는 모든 컴퓨터를 나열하는 방법?

는 지금에 유래 여기에 몇 가지 질문을 시도 :

,하지만 난 내 모든 컴퓨터를 필요가 있다고 생각하지 않습니다 네트워크 인터페이스 및 InetAddress.isReachable() 항상 (비록 내가 cmd를 통해 ping을 할 수 있고 방화벽이 꺼져 있어도) 명령 행을 호출한다.

"ping -n 1 192.168.2.i"는 모든 i에 대해 0 < = i < = 255,

은 항상 정상으로 종료되므로 항상 true입니다.

JVM이 실행되는 컴퓨터와 동일한 네트워크에있는 컴퓨터의 ipaddress 목록을 얻는 가장 좋은 방법은 무엇입니까?

답변

2

링크 된 답변을 사용하면 사용 가능한 인터페이스를 몇 가지 가능한 옵션 (예 : 위쪽 인터페이스, 루프백 없음, IPv4 주소 있음)으로 필터링 할 수 있습니다.

게임 호스트를 검색하려면 다음과 같이 할 수 있습니다.

  • 게임 호스트가 특정 포트에서 UDP 브로드 캐스트를 수신 대기하도록합니다.
  • 클라이언트가 위의 나머지 인터페이스 각각의 브로드 캐스트 주소로 UDP 브로드 캐스트를 보냅니다. 브로드 캐스트 주소는 인 getBroadcast()에 의해 결정될 수 있습니다.
  • 호스트가 응답하여 대기중인 클라이언트를 알립니다. UDP를 사용할 때 호스트 IP는 수신 된 DatagramPacket에 있습니다. TCP를 사용할 때 호스트 IP는 Socket에서 확인할 수 있습니다.
  • 그런 다음 클라이언트는 호스트 주소를 사용하여 직접 연결을 설정하고 RMI를 설정할 수 있습니다.

편집 : 내가 설명한 것보다 다소 적게 코드를 포함하는 this blog post을 발견했습니다.

+0

나는 약간 혼란 스럽다. 인터페이스가 현재 컴퓨터의 ipaddress (es)만을 제공한다고 생각했지만 두 번째 글 머리 기호에서 다른 컴퓨터의 ipaddress를 얻을 수 있음을 암시합니다. 다른 컴퓨터의 IP 주소를 어떻게 얻을 수 있는지 보여주는 예제 (링크)를 줄 수 있습니까? –

+0

@LiontackLightning 그렇지 않습니다. NIC의 * 브로드 캐스트 주소 *로 보냅니다. NIC는 여전히 로컬입니다. – EJP

+0

@LiontackLightning 로컬 인터페이스에서 브로드 캐스트 주소를 가져올 수 있습니다. 브로드 캐스트는 네트워크상의 모든 컴퓨터에 도달합니다. 특정 도착지 주소를 알 필요가 없습니다. 내 게시물을 업데이트하고 예제 링크를 포함 시켰습니다. – Prometheus