본문 바로가기

Java SE/RMI DateServer

RMI DateServer example

Server Compile(javac.exe, rmic.exe) > Client Compile(javac.exe) > start rmiregistry > Server start(java.exe) > Client start(java.exe)

1. Server Compile   => javac DateServerImpl.java<enter> *확장자 필요함
2. RMI Compile      => rmic DateServerImpl<enter>          *확장자 없음
3. rmiregistry.exe 실행 (코드가 있는 폴더에서 C:\JDK\bin\rmiregistry.exe를 실행함)  *아규먼트 없음
4. 서버실행           => java DateServerImpl<enter>
5. 클라이언트 실행 => java DateClient<enter>



파일배포

서버 측:          Server class, Stub class, interface
클라이언트 측: 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();

        }
    }
}