//AddInterface.java
import java.rmi.*;
public	interface AddInterface extends Remote
{
    public int sum(int n1, int n2) throws RemoteException
}

//Add.java
import java.rmi.*;
import java.rmi.server.*;
public class Add extends UnicastRemoteObject implements AddInterface
{
    int num1, num2 ;
    public Add() throws RemoteException
    {
    }
    public int sum(int n1, int n2) throws RemoteException
    {
        num1=n1;
        num2=n2;
        return n1+n2;
    }
}

//AddServer.java
import java.rmi.Naming;
public class AddServer
{
    public static void main(String args[])
    {
        try
            {
                Naming.rebind("Add",new Add());
                System.out.println("Server is connected and waiting for client");
            }
        catch(Exception e)
            {
                System.out.println("server could not connect:"+e);
            }
    }
}

//AddClient.java
import java.rmi.Naming;
public class AddClient
{
    public static void main(String args[])
    {
        try
            {
                AddInterface ai=(AddInterface)Naming.lookup("//localhost/Add");
                System.out.println("The sum of two nos. is :"+ai.sum(10,2));
            }
        catch(Exception e)
            {
                System.out.println("Client Exception:"+e);
            }
    }
}
