Server Compile(javac.exe, rmic.exe) > Client Compile(javac.exe) > start rmiregistry > Server start(java.exe) > Client start(java.exe)
2. RMI Compile => rmic DateServerImpl<enter> *확장자 없음
3. rmiregistry.exe 실행 (코드가 있는 폴더에서 C:\JDK\bin\rmiregistry.exe를 실행함) *아규먼트 없음
4. 서버실행 => java DateServerImpl<enter>
5. 클라이언트 실행 => java DateClient<enter>
파일배포
클라이언트 측: Client class, Stub class, interface
DateServer.java
import java.rmi.*;
public interface DateServer extends Remote {
java.util.Date getDate() throws RemoteException;
}
DateServerImpl.java
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.RMISecurityManager;
import java.rmi.server.UnicastRemoteObject;
public class DateServerImpl extends UnicastRemoteObject implements DateServer {
public DateServerImpl() throws RemoteException {
super();
}
public java.util.Date getDate() {
return new java.util.Date();
}
public static void main(String args[]) {
try {
DateServerImpl obj = new DateServerImpl();
Naming.rebind("DateServer", obj);
//커맨드 프롬프트 상에서 rmiregistry 를 실행하지 않고 코드상에서 서버를 등록하려면....
/* Registry registry = LocateRegistry.createRegistry(1066); // default:1099
* registry.rebind("DateServer", obj);
* 위의 경우처럼 포트를 1099가 아닌 포트로 지정했다면, 클라이어트 측에서 호출할 때에 다음처럼 포트를 명시해 주어야 한다.
* DateServer obj = (DateServer)Naming.lookup("rmi://localhost:1066/DateServer");
*/
System.out.println("DateServer bound in registry");
} catch (Exception e) {
System.out.println("DateImpl err: " + e.getMessage());
e.printStackTrace();
}
}
}
DateClient.java
import java.rmi.*;
public class DateClient {
public static void main(String[] args) {
try {
DateServer obj = (DateServer)Naming.lookup("rmi://localhost/DateServer");
java.util.Date date = obj.getDate();
System.out.println("서버에서 온 메시지:"+date);
} catch (Exception e) {
System.out.println(e.getMessage());
e.printStackTrace();
}
}
}