2013-10-30 1 views
0

서버가 클라이언트와 동일한 컴퓨터가 아닌 원격 서버 인 경우 실제로 클라이언트가 서버에 연결하는 방법에 대해 혼란 스럽습니다. 내 코드는 localhost를 사용하여 잘 작동하지만 클라이언트가 실제로 서버 호스트에 연결하여 rmiregistry를 찾는 방법을 파악할 수 없습니다. 나는 무엇이 서버의 레지스트리에 저장되는지 혼란 스럽다. Sample 또는 localhost인가? 이것은 바보 일지 모르지만 localhost를 클라이언트 측의 ipaddress로 변환하려고 시도하고 String url = "//"+ server + ":"+ 1099 + "/ Sample"; 여기서 서버는 getbyname()에서 가져온 IP이지만 예외가 발생합니다. java.rmi.NotBoundException : 127.0.0.1:1099/Sample 두 시스템의 클라이언트와 서버에서 발생했습니다. 나는 두 컴퓨터가 어떻게 원격으로 연결되는지 알아 내려고했지만 localhost의 IP 주소를 사용하는 동일한 컴퓨터에서도 작동하지 않았다.연결 클라이언트 - 서버 RMI

클라이언트 :

import java.net.InetAddress; 
import java.rmi.Naming; 
import java.rmi.RemoteException; 

public class SampleClient { 
    public static void main(String args[]) { 



      String url = "//" + "localhost" + ":" + 1099 + "/Sample"; 

      SampleInterface sample = (SampleInterface)Naming.lookup(url); 



     } catch(Exception e) { 
      System.out.println("SampleClient exception: " + e); 
     } 
    } 
} 

서버 :

import java.io.FileInputStream; 
import java.io.FileNotFoundException; 
import java.io.FileReader; 
import java.io.IOException; 
import java.rmi.Naming; 
import java.rmi.RemoteException; 
import java.rmi.RMISecurityManager; 
import java.rmi.server.UnicastRemoteObject; 

public class SampleServer { 
    public static void main(String args[]) throws IOException { 

     // Create and install a security manager 
     if (System.getSecurityManager() == null) 
      System.setSecurityManager(new RMISecurityManager()); 
     try { 

      String url = "//localhost:" + 1099 + "/Sample"; 
      System.out.println("binding " + url); 
      Naming.rebind(url, new Sample()); 
      // Naming.rebind("Sample", new Sample()); 
      System.out.println("server " + url + " is running..."); 
     } 
     catch (Exception e) { 
      System.out.println("Sample server failed:" + e.getMessage()); 
     } 
    } 
} 

답변

1

서버가 '로컬 호스트'에서 실행되는 레지스트리에 결합한다.

클라이언트는 서버 호스트에서 레지스트리를 조회해야합니다.

간단합니다.

서버의 레지스트리에 저장되는 내용에 혼란이 있습니다. 샘플 또는 로컬 호스트입니까?

도 아니다. 세 가지를 혼동하고 있습니다.

  1. 호스트 이름 (이 경우 'localhost').
  2. 바인드 이름 (이 경우 '샘플').
  3. 바인드 된 오브젝트. 리모트 스텁입니다.