import java.rmi.
Remote;
import java.rmi.RemoteException;
public interface Calculator extends Remote {
double add(double a, double b) throws RemoteException;
double subtract(double a, double b) throws RemoteException;
double multiply(double a, double b) throws RemoteException;
double divide(double a, double b) throws RemoteException;
}
import java.rmi.server.UnicastRemoteObject;
import java.rmi.RemoteException;
public class CalculatorImpl extends UnicastRemoteObject implements
Calculator {
protected CalculatorImpl() throws RemoteException {
super();
@Override
public double add(double a, double b) throws RemoteException {
return a + b;
}
@Override
public double subtract(double a, double b) throws RemoteException {
return a - b;
}
@Override
public double multiply(double a, double b) throws RemoteException {
return a * b;
}
@Override
public double divide(double a, double b) throws RemoteException {
if (b == 0) throw new ArithmeticException("Division by zero is not
allowed.");
return a / b;
}
}
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
public class CalculatorServer {
public static void main(String[] args) {
try {
Calculator calculator = new CalculatorImpl();
Registry registry = LocateRegistry.createRegistry(1099);
registry.rebind("Calculatorservice", calculator);
System.out.println("Calculator Server is running ... ");
} catch (Exception e) {
e.printStackTrace();
}
}
}
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.util.Scanner;
public class CalculatorClient {
public static void main(String[] args) {
try {
Registry registry = LocateRegistry.getRegistry("localhost", 1099);
Calculator calculator = (Calculator) registry.lookup("CalculatorService");
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.println("\nSelect operation: 1. Add 2. Subtract 3. Multiply 4.Divide
5.Exit");
int choice = scanner.nextInt();
if (choice == 5) break;
System.out.print("Enter first number: ");
double a = scanner.nextDouble();
System.out.print("Enter second number: ");
double b = scanner.nextDouble();
double result = 0;
switch (choice) {
case 1: result = calculator.add(a, b); break;
case 2: result = calculator.subtract(a, b); break;
case 3: result = calculator.multiply(a, b); break;
case 4:
try {
result = calculator.divide(a, b);
} catch (ArithmeticException e) {
System.out.println("Error: " + e.getMessage());
continue;
break;
default: System.out.println("Invalid choice."); continue;
System.out.println("Result: "+ result);
scanner.close();
} catch (Exception e) {
e.printStackTrace();