0% found this document useful (0 votes)
217 views

Go Back N

The document describes the Go Back-N protocol and Selective Repeat protocol. It includes code for a server and client implementing Go Back-N and code for a sender and receiver implementing Selective Repeat. The Go Back-N code shows the server receiving frames from the client and acknowledging frames, while the client resends any unacknowledged frames. The Selective Repeat code shows the sender transmitting frames and resending any frames returned with NAKs, while the receiver randomly introduces errors and sends ACKs or NAKs.
Copyright
© © All Rights Reserved
Available Formats
Download as DOC, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
217 views

Go Back N

The document describes the Go Back-N protocol and Selective Repeat protocol. It includes code for a server and client implementing Go Back-N and code for a sender and receiver implementing Selective Repeat. The Go Back-N code shows the server receiving frames from the client and acknowledging frames, while the client resends any unacknowledged frames. The Selective Repeat code shows the sender transmitting frames and resending any frames returned with NAKs, while the receiver randomly introduces errors and sends ACKs or NAKs.
Copyright
© © All Rights Reserved
Available Formats
Download as DOC, PDF, TXT or read online on Scribd
You are on page 1/ 16

Expt. No.

3(a)

Go Back N Protocol

import java.net.*;
import java.io.*;
import java.util.*;
public class Server
{
public static void main(String args[]) throws Exception
{
ServerSocket server=new ServerSocket(6262);
System.out.println(Server established.);
Socket client=server.accept();
ObjectOutputStream oos=new ObjectOutputStream(client.getOutputStream());
ObjectInputStream ois=new ObjectInputStream(client.getInputStream());
System.out.println(Client is now connected.);
int x=(Integer)ois.readObject();
int k=(Integer)ois.readObject();
int j=0;
int i=(Integer)ois.readObject();
boolean flag=true;
Random r=new Random(6);
int mod=r.nextInt(6);
while(mod==1||mod==0)
mod=r.nextInt(6);
while(true)
{
int c=k;
for(int h=0;h<=x;h++)
{
System.out.print(|+c+|);
c=(c+1)%x;
}
System.out.println();

System.out.println();
if(k==j)
{
System.out.println(Frame +k+ recieved+\n+Data:+j);
j++;
System.out.println();
}
else
System.out.println(Frames recieved not in correct order+\n+ Expected farme: +
j +\n+ Recieved frame no :+ k);
System.out.println();
if(j%mod==0 && flag)
{
System.out.println(Error found. Acknowledgement not sent. );
flag=!flag;
j;
}
else if(k==j-1)
{
oos.writeObject(k);
System.out.println(Acknowledgement sent);
}
System.out.println();
if(j%mod==0)
flag=!flag;
k=(Integer)ois.readObject();
if(k==-1)
break;
i=(Integer)ois.readObject();
}
System.out.println(Client finished sending data. Exiting);
oos.writeObject(-1);
}
}

/*Client Program*/
import java.util.*;
import java.net.*;
import java.io.*;
public class Client
{
public static void main(String args[]) throws Exception
{
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
System.out.print(Enter the value of m : );
int m=Integer.parseInt(br.readLine());
int x=(int)((Math.pow(2,m))-1);
System.out.print(Enter no. of frames to be sent:);
int count=Integer.parseInt(br.readLine());
int data[]=new int[count];
int h=0;
for(int i=0;i<count;i++)
{
System.out.print(Enter data for frame no +h+ => );
data[i]=Integer.parseInt(br.readLine());
h=(h+1)%x;
}
Socket client=new Socket(localhost,6262);
ObjectInputStream ois=new ObjectInputStream(client.getInputStream());
ObjectOutputStream oos=new ObjectOutputStream(client.getOutputStream());
System.out.println(Connected with server.);
boolean flag=false;
GoBackNListener listener=new GoBackNListener(ois,x);
listener=new GoBackNListener(ois,x);
listener.t.start();

int strt=0;
h=0;
oos.writeObject(x);
do
{
int c=h;
for(int i=h;i<count;i++)
{
System.out.print(|+c+|);
c=(c+1)%x;
}
System.out.println();
System.out.println();
h=strt;
for(int i=strt;i<x;i++)
{
System.out.println(Sending frame:+h);
h=(h+1)%x;
System.out.println();
oos.writeObject(i);
oos.writeObject(data[i]);
Thread.sleep(100);
}
listener.t.join(3500);
if(listener.reply!=x-1)
{
System.out.println(No reply from server in 3.5 seconds. Resending data from frame
no + (listener.reply+1));
System.out.println();
strt=listener.reply+1;
flag=false;
}
else
{

System.out.println(All elements sent successfully. Exiting);


flag=true;
}
}while(!flag);
oos.writeObject(-1);
}
}
class GoBackNListener implements Runnable
{
Thread t;
ObjectInputStream ois;
int reply,x;
GoBackNListener(ObjectInputStream o,int i)
{
t=new Thread(this);
ois=o;
reply=-2;
x=i;
}
@Override
public void run() {
try
{
int temp=0;
while(reply!=-1)
{
reply=(Integer)ois.readObject();
if(reply!=-1 && reply!=temp+1)
reply=temp;
if(reply!=-1)
{
temp=reply;
System.out.println(Acknowledgement of frame no + (reply%x) + recieved.);
System.out.println();

}
}
reply=temp;
}
catch(Exception e)
{
System.out.println(Exception => + e);
}
}
}

/*Client Output
Enter the value of m : 7
Enter no. of frames to be sent:5
Enter data for frame no 0 => 1
Enter data for frame no 1 => 2
Enter data for frame no 2 => 3
Enter data for frame no 3 => 4
Enter data for frame no 4 => 5
Connected with server.
|0||1||2||3||4|
Sending frame:0
Acknowledgement of frame no 0 recieved.

Sending frame:1
Sending frame:2
Sending frame:3
Sending frame:4
Sending frame:5
*/

/*Server Output
Server established.
Client is now connected.
|0||1||2||3||4||5||6||7||8||9||10||11||12||13||14||15||16||17||18||19||20||21||22||23||24||25||26||27||
28||29||30||31||32||33||34||35||36||37||38||39||40||41||42||43||44||45||46||47||48||49||50||51||
52||53||54||55||56||57||58||59||60||61||62||63||64||65||66||67||68||69||70||71||72||73||74||75||
76||77||78||79||80||81||82||83||84||85||86||87||88||89||90||91||92||93||94||95||96||97||98||99||
100||101||102||103||104||105||106||107||108||109||110||111||112||113||114||115||116||117||
118||119||120||121||122||123||124||125||126||0|
Frame 0 recieved
Data:0
Acknowledgement sent
|1||2||3||4||5||6||7||8||9||10||11||12||13||14||15||16||17||18||19||20||21||22||23||24||25||26||27||
28||29||30||31||32||33||34||35||36||37||38||39||40||41||42||43||44||45||46||47||48||49||50||51||
52||53||54||55||56||57||58||59||60||61||62||63||64||65||66||67||68||69||70||71||72||73||74||75||

76||77||78||79||80||81||82||83||84||85||86||87||88||89||90||91||92||93||94||95||96||97||98||99||
100||101||102||103||104||105||106||107||108||109||110||111||112||113||114||115||116||117||
118||119||120||121||122||123||124||125||126||0||1|
Frame 1 recieved
Data:1
Error found. Acknowledgement not sent.
|2||3||4||5||6||7||8||9||10||11||12||13||14||15||16||17||18||19||20||21||22||23||24||25||26||27||28||
29||30||31||32||33||34||35||36||37||38||39||40||41||42||43||44||45||46||47||48||49||50||51||52||
53||54||55||56||57||58||59||60||61||62||63||64||65||66||67||68||69||70||71||72||73||74||75||76||
77||78||79||80||81||82||83||84||85||86||87||88||89||90||91||92||93||94||95||96||97||98||99||100||
101||102||103||104||105||106||107||108||109||110||111||112||113||114||115||116||117||118||
119||120||121||122||123||124||125||126||0||1||2|
Frames recieved not in correct order
Expected farme:1
Recieved frame no :2
|3||4||5||6||7||8||9||10||11||12||13||14||15||16||17||18||19||20||21||22||23||24||25||26||27||28||29||
30||31||32||33||34||35||36||37||38||39||40||41||42||43||44||45||46||47||48||49||50||51||52||53||
54||55||56||57||58||59||60||61||62||63||64||65||66||67||68||69||70||71||72||73||74||75||76||77||
78||79||80||81||82||83||84||85||86||87||88||89||90||91||92||93||94||95||96||97||98||99||100||101||
102||103||104||105||106||107||108||109||110||111||112||113||114||115||116||117||118||119||
120||121||122||123||124||125||126||0||1||2||3|
Frames recieved not in correct order
Expected farme:1
Recieved frame no :3
|4||5||6||7||8||9||10||11||12||13||14||15||16||17||18||19||20||21||22||23||24||25||26||27||28||29||
30||31||32||33||34||35||36||37||38||39||40||41||42||43||44||45||46||47||48||49||50||51||52||53||
54||55||56||57||58||59||60||61||62||63||64||65||66||67||68||69||70||71||72||73||74||75||76||77||
78||79||80||81||82||83||84||85||86||87||88||89||90||91||92||93||94||95||96||97||98||99||100||101||
102||103||104||105||106||107||108||109||110||111||112||113||114||115||116||117||118||119||
120||121||122||123||124||125||126||0||1||2||3||4|

Frames recieved not in correct order


Expected farme:1
Recieved frame no :4
*/

Expt. No. 3(b)

Selective Repeat Protocol

SENDER
#include<stdio.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<string.h>
#include<time.h>
#include<stdlib.h>
#include<ctype.h>
#define W 5
char a[10];
char b[10];
void alpha9(int);
int con();
int main()
{
int s,f,wl,c=1,x,i=0,j,n,p=0,e=0;
struct sockaddr_in ser;
s=socket(AF_INET,SOCK_STREAM,0);
ser.sin_family=AF_INET;

ser.sin_port=6500;
ser.sin_addr.s_addr=inet_addr("127.0.0.1");
connect(s,(struct sockaddr *) &ser, sizeof(ser));
printf("\nTCP Connection Established.\n");
printf("\nEnter the number of Frames: ");
scanf("%d",&f);
alpha9(f);
send(s,a,sizeof(a),0);
strcpy(b,"Time Out ");
while(1)
{
for(i=0;i<W;i++)
{
alpha9(c);
send(s,a,sizeof(a),0);
if(c<=f)
{
printf("\nFrame %d Sent",c);
c++;
}
}
i=0;
wl=W;
while(i<W)
{
recv(s,a,sizeof(a),0);
p=atoi(a);
if(a[0]=='N')
{
e=con();
if(e<f)
{
printf("\nNAK %d",e);
printf("\nFrame %d sent",e);

i--;
}

else
{
if(p<=f)
{
printf("\nFrame %s Acknowledged",a);
wl--;
}
else
{
break;
}
}
if(p>f)
{
break;
}
i++;
}
if(wl==0 && c>f)
{
send(s,b,sizeof(b),0);
break;
}
else
{
c=c-wl;
wl=W;
}
}
close(s);
return 0;
}

void alpha9(int z)
{
int k,i=0,j,g;
k=z;
while(k>0)
{
i++;
k=k/10;
}
g=i;
i--;
while(z>0)
{
k=z%10;
a[i]=k+48;
i--;
z=z/10;
}
a[g]='\0';
}
int con()
{
char k[9];
int i=1;
while(a[i]!='\0')
{
k[i-1]=a[i];
i++;
}
k[i-1]='\0';
i=atoi(k);
return i;}

RECEIVER
#include<stdio.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<string.h>
#include<time.h>
#include<stdlib.h>
#include<ctype.h>
#include<arpa/inet.h>
#define W 5
#define P1 50
#define P2 10
char a[10];
char b[10];
void alpha9(int);
void alp(int);
int main()
{
struct sockaddr_in ser,cli;
int s,n,sock,i,j,c=1,f;
unsigned int s1;
s=socket(AF_INET,SOCK_STREAM,0);
ser.sin_family=AF_INET;
ser.sin_port=6500;
ser.sin_addr.s_addr=inet_addr("127.0.0.1");
bind(s,(struct sockaddr *) &ser, sizeof(ser));
listen(s,1);
n=sizeof(cli);
sock=accept(s,(struct sockaddr *)&cli, &n);
printf("\nTCP Connection Established.\n");

s1=(unsigned int) time(NULL);


srand(s1);
strcpy(b,"Time Out ");
recv(sock,a,sizeof(a),0);
f=atoi(a);
while(1)
{
for(i=0;i<W;i++)
{
recv(sock,a,sizeof(a),0);
if(strcmp(a,b)==0)
{
break;
}
}
i=0;
while(i<W)
{
L:
j=rand()%P1;
if(j<P2)
{
alp(c);
send(sock,b,sizeof(b),0);
goto L;
}
else
{
alpha9(c);
if(c<=f)
{
printf("\nFrame %s Received ",a);
send(sock,a,sizeof(a),0);
}

else
{
break;
}
c++;
}
if(c>f)
{
break;
}
i++;
}
}
close(sock);
close(s);
return 0;
}
void alpha9(int z)
{
int k,i=0,j,g;
k=z;
while(k>0)
{
i++;
k=k/10;
}
g=i;
i--;
while(z>0)
{
k=z%10;
a[i]=k+48;
i--;
z=z/10;

}
a[g]='\0';
}void alp(int z)
{

int k,i=1,j,g;
k=z;
b[0]='N';
while(k>0)
{

i++;
k=k/10;

g=i;
i--;
while(z>0) {
k=z%10;
b[i]=k+48;
i--;

z=z/10; }

b[g]='\0';}

You might also like