Stop and wait protocol
//SERVER
package ex5;
import java.io.*;
import java.net.*;
public class Ex5a {
ServerSocket reciever;
Socket connection=null;
ObjectOutputStream out;
ObjectInputStream in;
String packet, ack, data="";
int i=0,sequence=0;
Ex5a(){}
public void run(){
try{
BufferedReader br=new BufferedReader(new
InputStreamReader(System.in));
reciever= new ServerSocket(2005,10);
System.out.println("waiting for connection");
connection=reciever.accept();
sequence=0;
System.out.println("Connection Established");
out=new
ObjectOutputStream(connection.getOutputSt
ream());
out.flush();
in=new
ObjectInputStream(connection.getInputStrea
m());
out.writeObject("Connected");
do{
try{
packet=(String)in.readObject();
if(Integer.valueOf(packet.substring(0,1))==seq
uence){
data+=packet.substring(1);
sequence=(sequence==0)?1:0;
System.out.println("\n\n reciever>"+packet);
}
else{
System.out.println("\n\n Reciever duplicate
data");
}
if(i<3)
{
out.writeObject(String.valueOf(sequence));
i++;
}
else{
out.writeObject(String.valueOf((sequence+1)
%2));
i=0;
}
}
catch(Exception e){}
}
while(!packet.equals("end"));
System.out.println("Data recieved="+data);
out.writeObject("Connection ended");
}
catch(Exception e){}
}
public static void main(String[] args){
Ex5a e=new Ex5a();
while(true)
e.run();
}
}
//CLIENT
package ex5;
import java.io.*;
import java.net.*;
public class Ex5 {
Socket sender;
ObjectOutputStream out;
ObjectInputStream in;
String packet,ack,str,msg;
int n,i=0,sequence=0;
Ex5(){}
public void run()
{
try
{
BufferedReader br=new BufferedReader(new
InputStreamReader(System.in));
System.out.println("Waiting for connection");
sender=new Socket("localhost",2005);
sequence=0;
out=new
ObjectOutputStream(sender.getOutputStream
());
out.flush();
in=new
ObjectInputStream(sender.getInputStream());
str=(String)in.readObject();
System.out.println("reciever>"+str);
System.out.println("Enter the data to send:");
packet=br.readLine();
n=packet.length();
do
{
try
{
if(i<n)
{
msg=String.valueOf(sequence);
msg=msg.concat(packet.substring(i,i+1));
}
else if(i==n)
{
msg="end";
out.writeObject(msg);
break;
}
out.writeObject(msg);
sequence=(sequence==0)?1:0;
out.flush();
System.out.println("data send>"+msg);
ack=(String)in.readObject();
System.out.println("Waiting for ack\n\n");
if(ack.equals(String.valueOf(sequence)))
{
i++;
System.out.println("reciever>"+"packet
reciever\n\n");
}
else
{
System.out.println("Timeout resending
data\n\n ");
sequence=(sequence==0)?1:0;
}
}
catch(Exception e){}
}
while(i<n+1);
System.out.println("All data sent. exiting.");
}
catch(Exception e){}
finally
{
try{
in.close();
out.close();
}
catch(Exception e){}
}
}
public static void main(String[]args)
{
Ex5 s=new Ex5();
s.run();
}
}