2017-11-13 16 views
0

나는이 두 RMI 자바 응용 프로그램 :자바 RMI 서버 호스트 이름

ngrok tcp 1099 
: 둘 사이의 통신이 Ngrok의 도움으로 이루어집니다

System.setProperty("java.rmi.server.hostname","0.tcp.ngrok.io"); 
    System.setProperty("java.security.policy","security.policy"); 
     Calculator c = (Calculator) Naming.lookup("//0.tcp.ngrok.io:18872"+"/Calc"); 
     int sum=c.add(1, 5); 

서버

 System.setProperty("java.rmi.server.hostname","0.tcp.ngrok.io"); 
    System.setProperty("java.security.policy","security.policy"); 
     if (System.getSecurityManager() == null) 
         { 
         System.setSecurityManager(new SecurityManager()); 
         } 

     Registry r = LocateRegistry.createRegistry(1099); 
     r.rebind("Calc",new CalculatorImpl()); 

클라이언트

결과

Session Status    online 
    Account      nival (Plan: Free) 
    Version      2.2.8 
    Region      United States (us) 
    Web Interface     http://127.0.0.1:4040 
    Forwarding     tcp://0.tcp.ngrok.io:18872 -> localhost:1099 

    Connections     ttl  opn  rt1  rt5  p50  p90 
            5  0  0.00 0.00 5.88 17.03 

내 문제는 다음과 같습니다

RemoteException 
java.rmi.ConnectException: Connection refused to host: 0.tcp.ngrok.io; nested exception is: 
java.net.ConnectException: Connection timed out: connect 

나는 문제가 내가 "java.rmi.server.hostname에서 서버와 클라이언트에 넣어해야하는지

System.setProperty("java.rmi.server.hostname","0.tcp.ngrok.io"); 

에서 생각 "? (내 나쁜 영어 죄송합니다)

일반적으로

답변

0

유일한 수출 스텁 세계에 사용할 수 있습니다 어떤 호스트에 표시 할 서버 측에 요구했다.

예를 들어, 서버가 인트라넷에 있고 일부 인터페이스에서 수신 대기하는 경우 192.168.2.1이 유용합니다. NAT 프록시는 인터넷에서 해당 호스트로 포트를 전달할 수 있습니다. 통상, RMI 레지스트리는 주소 192.168.2.1:someport에 export 된 스텁을보고합니다. 하지만 분명히 그 주소를 직접 치는 수는 없습니다 java.rmi.server.hostname이 행동에 들어갑니다. 이 속성을 설정하면 RMI 레지스트리는 실제 인트라넷 주소에 주어진 hostname 주어진 주소로 내 보낸 스텁을 알리며 클라이언트가 NAT 게이트웨이의 전달 된 포트에서 외부 스텁으로 스텁을 가져올 수있게합니다.

서버가 NAT 뒤에있는 경우 인터넷에서 NAT 게이트웨이를 가리키는 도메인을 지정해야합니다. 서버에 외부 IP가 있고 해당 IP에서 수신 중이면이 속성은 필요하지 않습니다.