You are on page 1of 4

1> A Simple Java RMI example

The client program(RmiClient.class) sends a message to the server


program(RmiServer.class). The server program print out the message on the console.
- This example consists of the following files
 MessageReceiverInterface.java
 This part defines the RMI interface. The method (receiveMessage) of
the server class, which implements this interface, is called from the
remote client. In the remote client program, the type of the server
class (which is the remote class in this client class) is this interface.
 RmiServer.java
 This is the server program(class). In this class, the method
“receiveMessage”, which is called from the remote client, is defined.
This class is the implementation of the RMI interface.
 RmiClient.java
 This is the client program(class). The remote method is called from
this class.

- Execution outline
1. RmiServer creates the “registry”. This is a kind of dictionary. Its key
is a name (which is the ID of a remote object) and its content is an
object. This object is looked up from a remote program by the
name. This registry is accessed from a remote object by the IP
address (or host name) and the port number.
2. RmiServer binds the name “rmiServer” and it-self(RmiServer.class)
in the registry.

registry

miServer�RmiServer

RmiServer
RmiClient
receiveMessage(�

3. RmiClient looks up the remote object (RmiServer) by the name


“rmiServer”.

registry

miServer�RmiServer

RmiClient RmiServer

rmiServer. receiveMessage(�

4. RmiClient calls the method “receiveMessage” of the RmiServer


class.
5. The method “receiveMessage” of the RmiServer class prints out the
message.

registry

miServer�RmiServer

RmiClient RmiServer

rmiServer.receiveMessage(� receiveMessage(�

- Compile
1. javac RmiServer.java
2. rmic RmiServer
3. javac RmiClient.java

- Execution
1. (at one host,) java RmiServer
2. (at another host) java RmiClient <server’s address> 3232
<message text>
- The source codes
ReceiveMessageInterface.java

import java.rmi.*;
public interface ReceiveMessageInterface extends Remote
{
              void receiveMessage(String x) throws
RemoteException;
      }

RmiServer.java

import java.rmi.*;
import java.rmi.registry.*;
import java.rmi.server.*;
import java.net.*;

public class RmiServer extends


java.rmi.server.UnicastRemoteObject
implements ReceiveMessageInterface
{
int thisPort;
String thisAddress;
Registry registry; // rmi registry for lookup the
remote objects.

// This method is called from the remote client by


the RMI.
// This is the implementation of the
“ReceiveMessageInterface”.
public void receiveMessage(String x) throws
RemoteException
{
System.out.println(x); }

public RmiServer() throws RemoteException


{
try{
// get the address of this host.
thisAddress=
(InetAddress.getLocalHost()).toString();
}
catch(Exception e){
throw new RemoteException("can't get inet
address.");
}
thisPort=3232; // this port(registry’s port)
System.out.println("this
address="+thisAddress+",port="+thisPort);
try{
// create the registry and bind the name and
object.
registry =
LocateRegistry.createRegistry( thisPort );
registry.rebind("rmiServer", this);
}
catch(RemoteException e){
throw e;
}
}

static public void main(String args[])


{
try{
RmiServer s=new RmiServer();
}
catch (Exception e) {
e.printStackTrace();
System.exit(1);
}
}
}

RmiClient.java

import java.rmi.*;
import java.rmi.registry.*;
import java.net.*;

public class RmiClient


{
static public void main(String args[])
{
ReceiveMessageInterface rmiServer;
Registry registry;
String serverAddress=args[0];
String serverPort=args[1];
String text=args[2];
System.out.println("sending "+text+" to
"+serverAddress+":"+serverPort);
try{
// get the “registry”
registry=LocateRegistry.getRegistry( serverAddress, (new
Integer(serverPort)).intValue()
);
// look up the remote object
rmiServer=
(ReceiveMessageInterface)
(registry.lookup("rmiServer"));
// call the remote method
rmiServer.receiveMessage(text);
}
catch(RemoteException e){
e.printStackTrace();
}
catch(NotBoundException e){
e.printStackTrace();
}
} }

You might also like