Bu uygulamamda server tarafında hesap makinesi işlemleri yapan bir metodum var client tarafında değerleri gönderiyorum serverda hesaplama yapılıyor ve client olan bilgisayara sonuç gönderiliyor.
Client olan bilgisayarda bulunması gereken interface ve sınıf

Calculator.java // Burada bir interface tanımlarız ve remote interface inden extends ederiz ve metodlarımız ile ilgili istisna fırlatırız.

import java.rmi.*;
public interface Calculator extends Remote {
public long add(long a, long b) throws RemoteException;
public long sub(long a, long b) throws RemoteException;
public long mul(long a, long b) throws RemoteException;
public long div(long a, long b) throws RemoteException;
}

CalculatorClient.java sınıfı
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.net.MalformedURLException;
import java.rmi.NotBoundException;
public class CalculatorClient {
public static void main(String[] args) {
try {
Calculator c = (Calculator)Naming.lookup("rmi://127.0.0.1:1099/CalculatorService"); /* Burada server ın Ip adresini girdik sonra serverda açık olan 1099 nolu portu yazdık ve bir servis ismi tanımadık. */
System.out.println( c.sub(9, 3) ); /* burada hesaplama yapacak olan metodlara değer gönderdik */
System.out.println( c.add(7, 5) );
System.out.println( c.mul(5, 6) );
System.out.println( c.div(9, 3) );
}
catch (MalformedURLException murle) {
System.out.println();
System.out.println("MalformedURLException");
System.out.println(murle);
}
catch (RemoteException re) {
System.out.println();
System.out.println("RemoteException");
System.out.println(re);
}
catch (NotBoundException nbe) {
System.out.println();
System.out.println("NotBoundException");
System.out.println(nbe);
}
catch (
java.lang.ArithmeticException ae) {
System.out.println();
System.out.println("java.lang.ArithmeticException");
System.out.println(ae);
} } }

Server olan bilgisayarda bulunması gereken interface ve sınıflar

CalculatorImpl.java sınıfı /* Hesaplama yapacak olan metodlarımız bu sınıf içerisindedir bu sınıfta onceden oluşturduğmuz Calculator interfaceini implement ederiz ve UnicastRemoteObject sınıfını extends ederiz Client ın kullanabilmesi için */

import java.rmi.Naming;
import java.rmi.RMISecurityManager;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
public class CalculatorImpl
extends UnicastRemoteObject implements Calculator {
public CalculatorImpl() throws RemoteException {
super();
}
public long add(long a, long b)throws RemoteException {
return a + b;
}
public long sub(long a, long b) throws RemoteException {
return a – b;
}
public long mul(long a, long b) throws RemoteException {
return a * b;
}
public long div(long a, long b) throws RemoteException {
return a / b;
}
}

CalculatorServer.java sınıfı

import java.rmi.Naming;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.rmi.server.UnicastRemoteObject; /* Clien ın kullanabileceği Remote objeler oluşturmak için kullanılır */
public class CalculatorServer {
public CalculatorServer() {
try {
Registry reg=LocateRegistry.createRegistry(1099); // Burada 1099 nolu portu açtık
reg=LocateRegistry.getRegistry(); //Burada 1099 nolu portu çalıştırıyoruz.
reg.rebind("CalculatorService", new CalculatorImpl());
}
catch (Exception e) {
System.out.println("Trouble: " + e);
}
}
public static void main(String[] args) {
new CalculatorServer();}
}

Şimdi önce server bilgisayarda bulunan CalculatorServer.java sınıfımızı çalıştıralım sonrada Client bilgisayarda bulunan CalculatorClient.java sınıfımızı çalıştıralım.
Calculator c = (Calculator)Naming.lookup(“rmi://127.0.0.1:1099/CalculatorService”);
Eğer iki biilgisayar var biri server biri client ise Client sınıfında bulunan yukarıdaki kod kısmında 127.0.0.1 yazan bölüm yerine serverın IP adresini yazmamız gerekiyor (192.168.2.20) gibi ben bu programı tek bilgisayarda çalıştırdığım için şuan 127.0.0.1 yani localhost adresini verdim.