서버가 클라이언트와 동일한 컴퓨터가 아닌 원격 서버 인 경우 실제로 클라이언트가 서버에 연결하는 방법에 대해 혼란 스럽습니다. 내 코드는 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());
}
}
}