/* Client Server Program using Remote Procedure Call (RPC) */
// RPC Server Program
import [Link].*;
import [Link].*;
class serrpc
{
public static void main(String[] args) throws Exception
{
ServerSocket ss = new ServerSocket(3000);
[Link]("Server ready");
Socket soc = [Link]( );
DataInputStream dis=new DataInputStream([Link]());
PrintWriter pw=new PrintWriter([Link](),true);
DataInputStream kb=new DataInputStream([Link]);
String receiveMessage, sendMessage,op;
int a,b,c;
while(true)
{
op = [Link]();
if(op!= null)
[Link]("Operation : "+op);
a = [Link]([Link]());
[Link]("Parameter 1 : "+a);
b = [Link]([Link]());
[Link]("Parameter 2 : "+b);
if([Link]("add")==0)
{
c=a+b;
[Link]("Addition = "+c);
[Link]("Addition = "+c);
}
if([Link]("sub")==0)
{
c=a-b;
[Link]("Substraction = "+c);
[Link]("Substraction = "+c);
}
if([Link]("mul")==0)
{
c=a*b;
[Link]("Multiplication = "+c);
[Link]("Multiplication = "+c);
}
Page | 1
if([Link]("div")==0)
{
c=a/b;
[Link]("Division = "+c);
[Link]("Division = "+c);
}
[Link]();
}
}
}
// RPC Client Program
import [Link].*;
import [Link].*;
class clirpc
{
public static void main(String[] args) throws Exception
{
Socket soc = new Socket("localhost", 3000);
DataInputStream dis=new DataInputStream([Link]());
PrintWriter pw=new PrintWriter([Link](),true);
DataInputStream kb=new DataInputStream([Link]);
[Link]("Client ready, type and press Enter key");
String receiveMessage, sendMessage,temp;
while(true)
{
[Link]("\nEnter operation to perform(add,sub,mul,div)....");
temp = [Link]();
sendMessage=[Link]();
[Link](sendMessage);
[Link]("Enter first parameter :");
sendMessage = [Link]();
[Link](sendMessage);
[Link]("Enter second parameter : ");
sendMessage = [Link]();
[Link](sendMessage);
[Link]();
if((receiveMessage = [Link]()) != null)
[Link](receiveMessage);
}
}
}
Page | 2
/* OUTPUT */
Server side output:
C:\ >java serrpc
Server ready
Operation : add
Parameter 1 : 10
Parameter 2 : 20
Addition = 30
Operation : mul
Parameter 1 : 5
Parameter 2 : 20
Multiplication = 100
Client side output:
C:\ >java clirpc
Client ready, type and press Enter key
Enter operation to perform(add,sub,mul,div)....
add
Enter first parameter :
10
Enter second parameter :
20
Addition = 30
Enter operation to perform(add,sub,mul,div)....
mul
Enter first parameter :
5
Enter second parameter :
20
Multiplication = 100
Enter operation to perform(add,sub,mul,div)....
Page | 3
/* Client Server based Program using Remote Method Invocation (RMI) */
// Interface Program
import [Link].*;
public interface MyInterface extends Remote
{
public String countInput(String input)throws RemoteException;
}
//RMI Server Program
import [Link].*;
import [Link].*;
public class RMIServer extends UnicastRemoteObject implements MyInterface
{
public RMIServer()throws RemoteException
{
[Link]("Remote Server is running Now.!!");
}
public static void main(String arg[])
{
try{
RMIServer p=new RMIServer();
[Link]("rmiInterface",p);
}
catch(Exception e)
{
[Link]("Exception occurred : "+[Link]());
}
}
@Override
public String countInput(String input) throws RemoteException
{
[Link]("Received your input "+ input+" at server!!");
String reply;
reply="You have typed "+ [Link]() +" letters!!";
return reply;
}
}
Page | 4
//RMI Client Program
import [Link].*;
import [Link].*;
public class RMIClient
{
public static void main(String args[])
{
try
{
DataInputStream d=new DataInputStream([Link]);
MyInterface p=( MyInterface)[Link]("rmiInterface");
[Link]("Type something...");
String input=[Link]();
[Link]([Link](input));
}
catch(Exception e)
{
[Link]("Exception occurred : "+[Link]());
}
}
}
/*OUTPUT*/
Interface output:
C:\rmi>rmiregistry
Server side output:
C:\rmi>java RMIServer
Remote Server is running Now.!!
Received your input welcome to Distributed Systems Lab at server!!
Client side output:
C:\rmi>java RMIClient
Type something...
welcome to Distributed Systems Lab
You have typed 34 letters!!
Page | 5
/* Lamport Clock Synchronization (Logical) */
import [Link].*;
import [Link];
import [Link].*;
import [Link].*;
import [Link].*;
public class lamport
{
int e[][]=new int[10][10];
int en[][]=new int[10][10];
int ev[]=new int[10];
int i,p,j,k;
HashMap<Integer,Integer> hm=new HashMap<Integer,Integer>();
int xpoints[] =new int[5];
int ypoints[] =new int[5];
class draw extends JFrame
{
private final int ARR_SIZE = 4;
void drawArrow(Graphics g1, int x1, int y1, int x2, int y2)
{
Graphics2D g = (Graphics2D) [Link]();
double dx = x2 - x1, dy = y2 - y1;
double angle = Math.atan2(dy, dx);
int len = (int) [Link](dx*dx + dy*dy);
AffineTransform at = [Link](x1, y1);
[Link]([Link](angle));
[Link](at);
// Draw horizontal arrow starting in (0, 0)
[Link](0, 0, len, 0);
[Link](new int[] {len, len-ARR_SIZE, len-ARR_SIZE, len},
new int[] {0, -ARR_SIZE, ARR_SIZE, 0}, 4);
}
public void paintComponent(Graphics g)
{
for (int x = 15; x < 200; x += 16)
drawArrow(g, x, x, x, 150);
drawArrow(g, 30, 300, 300, 190);
}
public void paint(Graphics g)
{
int h1,h11,h12;
Graphics2D go=(Graphics2D)g;
[Link]([Link]);
for(i=1;i<=p;i++)
{
[Link](50,100*i,450,100*i); }
Page | 6
for(i=1;i<=p;i++)
{
for(j=1;j<=ev[i];j++)
{
k=i*10+j;
[Link]([Link]);
[Link](50*j,100*i-3,5,5);
[Link]("e"+i+j+"("+en[i][j]+")",50*j,100*i-5);
h1=[Link](k);
if(h1!=0)
{
h11=h1/10;
h12=h1%10;
[Link]([Link]);
drawArrow(go,50*h12+2,100*h11,50*j+2,100*i);
}
}
}
}
}
public void calc(){
Scanner sc=new Scanner([Link]);
[Link]("Enter the number of process:");
p=[Link]();
[Link]("Enter the no of events per process:");
for(i=1;i<=p;i++)
{
ev[i]=[Link]();
}
[Link]("Enter the relationship:");
for(i=1;i<=p;i++)
{
[Link]("For process:"+i);
for(j=1;j<=ev[i];j++)
{
[Link]("For event:"+(j));
int input=[Link]();
k=i*10+j;
[Link](k,input);
if(j==1)
en[i][j]=1;
}
}
for(i=1;i<=p;i++)
{
for(j=2;j<=ev[i];j++)
{
k=i*10+j;
if([Link](k)==0){ en[i][j]=en[i][j-1]+1; }
Page | 7
else
{
int a=[Link](k);
int p1=a/10;
int e1=a%10;
if(en[p1][e1]>en[i][j-1])
en[i][j]=en[p1][e1]+1;
else
en[i][j]=en[i][j-1]+1;
}
}
}
for(i=1;i<=p;i++)
{
for(j=1;j<=ev[i];j++)
{ [Link](en[i][j]); }
}
JFrame jf=new draw();
[Link](JFrame.EXIT_ON_CLOSE);
[Link](500,500);
[Link](true);
}
public static void main(String[] args)
{
lamport lam=new lamport();
[Link]();
}
}
/* OUTPUT */
C:\>java lamport
Enter the number of process:
2
Enter the no of events per process:
7
5
Enter the relationship:
For process:1
For event:1
0
For event:2
0
For event:3
0
For event:4
0
For event:5
22
Page | 8
For event:6
0
For event:7
24
For process:2
For event:1
0
For event:2
0
For event:3
12
For event:4
0
For event:5
16
1
2
3
4
5
6
7
1
2
3
4
7
Page | 9
/* Election Algorithm (Bully Algorithm) */
import [Link].*;
class EleBully{
static int n;
static int priority[] = new int[100];
static int status[] = new int[100];
static int coordinator;
public static void main(String args[])throws IOException
{
[Link]("Enter the number of process");
DataInputStream d = new DataInputStream([Link]);
n = [Link]([Link]());
for( int i=0;i<n;i++)
{
[Link]("For process "+(i+1)+":");
[Link]("Status:");
status[i]=[Link]([Link]());
[Link]("Priority");
priority[i] = [Link]([Link]());
}
[Link]("Which process will initiate election?");
int ele = [Link]([Link]());
election(ele);
[Link]("Final coordinator is "+coordinator);
}
static void election(int ele)
{
ele = ele-1;
coordinator = ele+1;
for(int i=0;i<n;i++)
{
if(priority[ele]<priority[i])
{
[Link]("Election message is sent from "+(ele+1)+" to "+(i+1));
if(status[i]==1)
election(i+1);
}
}
}
}
Page | 10
/*OUPUT*/
C:\>java EleBully
Enter the number of process
5
For process 1:
Status:
1
Priority
1
For process 2:
Status:
1
Priority
2
For process 3:
Status:
1
Priority
3
For process 4:
Status:
1
Priority
4
For process 5:
Status:
0
Priority
5
Which process will initiate election?
3
Election message is sent from 3 to 4
Election message is sent from 4 to 5
Election message is sent from 3 to 5
Final coordinator is 4
Page | 11
/* Multi-threaded Client/Server Process */
//Sever Program
import [Link].*;
import [Link].*;
class MS
{
public static void main(String args[])
{
try{
ServerSocket ss=new ServerSocket (3339);
int client=1;
while(true){
Socket soc=[Link]();
ThreadHandler th=new ThreadHandler(soc,client);
[Link]();
client++;
}
}catch(Exception e){[Link]();}
}
}
class ThreadHandler extends Thread
{
Socket soc;
int count;
ThreadHandler(Socket so,int c){soc=so;count=c;}
public void run()
{
try{
DataInputStream dis=new DataInputStream([Link]());
PrintWriter pw=new PrintWriter([Link](),true);
DataInputStream kb=new DataInputStream([Link]);
[Link]("Server is Running..");
while(true)
{
[Link]("C-"+count+":"+[Link]());
[Link]("Message to Client: ");
[Link]([Link]());
}
}catch(Exception e){[Link]();}
}
}
Page | 12
//Client Program
import [Link].*;
import [Link].*;
class C
{
public static void main(String args[])
{
try{
Socket soc=new Socket ("localhost",3339);
DataInputStream dis=new DataInputStream([Link]());
PrintWriter pw=new PrintWriter([Link](),true);
DataInputStream kb=new DataInputStream([Link]);
[Link]([Link]());
String str;
while(true)
{
[Link]("Message to server");
[Link]([Link]());
str=[Link]();
if([Link]("End")) break;
[Link]("From Server: "+str);
}
}catch(Exception e){[Link]();}
}
}
/*OUTPUT*/
Server side output:
C:\>java MS
C-1:Hai Iam Amell
Message to Client:
Hai Amell
C-2:Hai Iam Robert
Message to Client:
Hai Robert
Client side output:
C:\>java C
Server is Running..
Message to server
Hai Iam Amell
From Server: Hai Amell
Message to server
Page | 13
C:\>java C
Server is Running..
Message to server
Hai Iam Robert
From Server: Hai Robert
Message to server
Page | 14