중간 서버없이 피어와 파일을 공유해야하는 프로젝트를 받았습니다. 얼마나 많은 호스트가 네트워크에서 온라인 상태인지 그리고 어떻게 그들과 연결 하는지를 알고 싶습니다. Java를 통해 내 컴퓨터의 호스트에 대한 라우팅 테이블을 대략 작성해야합니다.피어 2 Java 피어 연결
답변
라우팅을 추적 할 필요가 없습니다. 필요한 것은 끝점 주소를 아는 것입니다.
이 호스트와의 연결을 설정하여 호스트가 네트워크에 연결되어 있는지 확인할 수 있습니다.
중간 서버가 없으므로 NAT 구멍 펀칭이 문제의 범위를 벗어나는 것으로 언급했습니다.
출발점은 java.net.Socket
클래스 문서를 참조하십시오.
개인 네트워크에 있다고 가정합니다. 상대적으로 포함 된 것. 인터넷을 통해 서로를 찾게하면 악몽처럼 들릴 수 있습니다.
그래서이 경우 주어진 동료가 서로를 찾을 수있는 한 가지 모델은 표준화 된 일련의 포트와 활성 신호를 선택하는 것일 수 있습니다. 그런 다음 피어가 다른 사람을 검색하면 네트워크상의 모든 IP를 통과하고 해당 포트 번호에 대한 요청을 수행합니다. 살아있는 신호를 받으면 테이블에 추가합니다. 신호를받은 컴퓨터는 새로운 코너를 기록해야합니다.
일반적으로 네트워크에서 사용되지 않도록 포트 시퀀스를 선택해야합니다. (꽤 큰) 나는 시퀀스를 말하며 검색 속도를 높이기 위해 선호도가있다.
살아있는 신호가 전송 될 때 검색 속도를 더욱 높이기 위해 피어 테이블과 검사 한 IP (및 동일한 방식으로 수신 한 IP)도 보낼 수 있습니다. 그런 다음 새로운 피어는 프로그램의 새로운 인스턴스가있는 오래된 IP가 스스로를 확립하기 때문에 네트워크에서 새로운 IP를 확인하기 만하면됩니다.
도움이 되길 바랍니다.
모든 호스트에서 매번 피어 테이블을 브로드 캐스트해야합니까? –
아니요, 전혀 아닙니다. 그것이 쉬운 경우 전체 네트워크를 검사 할 수 있습니다. 시스템이 테이블을 다시 보내도록하는 것이 더 많은 작업이지만 전체 시스템의 네트워크 오버 헤드를 줄여줍니다. – dakotapearl
어떻게 다른 끝점 주소를 얻을 수 있습니까? –
getInetAddress()를 사용하여 원격 호스트 IP 주소를 가져올 수는 있지만 주소가 잘못되어 서버 구현이 허용되지 않으면 다른 끝점에 연결하는 방법을 이해하지 마십시오. 미리 감사드립니다. –
@RahulKumar 질문을 조금 명확하게 설명해 주시겠습니까? 그것은 당신에게 조언을주기에는 너무 추상적입니다. – Serge