AIM
To write a java
program to perform sliding window protocol
ALGORITHM:
1.Start the program.
2.Get the frame size
from the user
3.To
create the frame based on the user request. 4.To send frames to
server from the client side.
5.If your frames
reach the server it will send ACK signal to client otherwise it will
send NACK signal to client.
6.Stop the program
PROGRAM
/SENDER
PROGRAM
import
java.io.*;
import
java.net.*;
public
class Sender{
Socket
sender;
ObjectOutputStream
out;
ObjectInputStream
in;
String
packet,ack,str, msg;
int
n,i=0,sequence=0;
Sender(){}
public
void run(){
try{
BufferedReader
br=new BufferedReader(new InputStreamReader(System.in));
System.out.println("Waiting
for Connection....");
sender
= new Socket("localhost",2004);
sequence=0;
out=new
ObjectOutputStream(sender.getOutputStream());
out.flush();
in=new
ObjectInputStream(sender.getInputStream());
str=(String)in.readObject();
System.out.println("reciver
> "+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
sent>"+msg);
ack=(String)in.readObject();
System.out.println("waiting
for ack.....\n\n");
if(ack.equals(String.valueOf(sequence))){
i++;
System.out.println("receiver
> "+" packet recieved\n\n");
}
else{
System.out.println("Time
out 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();
sender.close();
}
catch(Exception
e){}
}
}
public
static void main(String args[]){
Sender
s=new Sender();
s.run();
}
}
//RECEIVER
PROGRAM
import
java.io.*;
import
java.net.*;
public
class Reciever{
ServerSocket
reciever;
Socket
connection=null;
ObjectOutputStream
out;
ObjectInputStream
in;
String
packet,ack,data="";
int
i=0,sequence=0;
Reciever(){}
public
void run(){
try{
BufferedReader
br=new BufferedReader(new InputStreamReader(System.in));
reciever
= new ServerSocket(2004,10);
System.out.println("waiting
for connection...");
connection=reciever.accept();
sequence=0;
System.out.println("Connection
established :");
out=new
ObjectOutputStream(connection.getOutputStream());
out.flush();
in=new
ObjectInputStream(connection.getInputStream());
out.writeObject("connected
.");
do{
try{
packet=(String)in.readObject();
if(Integer.valueOf(packet.substring(0,1))==sequence){
data+=packet.substring(1);
sequence=(sequence==0)?1:0;
System.out.println("\n\nreceiver
>"+packet);
}
else
{
System.out.println("\n\nreceiver
>"+packet +" 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
recived="+data);
out.writeObject("connection
ended .");
}
catch(Exception
e){}
finally{
try{
in.close();
out.close();
reciever.close();
}
catch(Exception
e){}
}
}
public
static void main(String args[]){
Reciever
s=new Reciever();
while(true){
s.run();
}
}
}
OUTPUT:
OUTPUT:
//SENDER
OUTPUT
Waiting
for Connection....
reciver
> connected .
Enter
the data to send....
myname
data
sent>0m
waiting
for ack.....
receiver
> packet recieved
data
sent>1y
waiting
for ack.....
receiver
> packet recieved
data
sent>0n
waiting
for ack.....
receiver
> packet recieved
data
sent>1a
waiting
for ack.....
Time
out resending data....
data
sent>1a
waiting
for ack.....
receiver
> packet recieved
data
sent>0m
waiting
for ack.....
receiver
> packet recieved
data
sent>1e
waiting
for ack.....
receiver
> packet recieved
All
data sent. exiting.
//RECEIVER
OUTPUT
waiting
for connection...
Connection
established :
receiver
>0m
receiver
>1y
receiver
>0n
receiver
>1a
receiver
>1a duplicate data
receiver
>0m
receiver
>1e
Data
recived=myname
waiting
for connection...
No comments:
Post a Comment