You are on page 1of 16

//TO IMPLEMENT CYLCIC REDUNDENCY CHECK

SOURCE CODE
#include <iostream> # include <math.h> using namespace std; int countbit(int p) { int i = 0; while(p>=1) { i++; p = p/2; } return i; } int* tobinary( int p) { int rem, a[20], j, k; int i; int *b=new int[countbit(p)]; i=0; while(p>=1) { rem = p%2; if(rem == 1) { a[i]=1;} else { a[i] = 0;} i++; p=p/2; } k = i-1; for(j=0; j<i; j++, k--) { b[j] = a[k]; } return b; }

int todecimal(int *p, int nob) { double decimal = 0; int counter = 0; while (counter < nob) { if(p[counter] == 1)

{ decimal = (decimal + pow(2.0,counter)); } counter++; } return decimal; } void reciever(int*, int, int); void sender(int poly, int gen, int flag) { int *p, *g, cp, cg, *dup, i; dup = new int[countbit(poly)]; p = tobinary(poly); //coversion to binary g = tobinary(gen); cp = countbit(poly); //number of bits in polynomial in binary form cg = countbit(gen); //number of bits in polyomial in generator form cout<<"\n\n\nIN SENDER"; cout<<"\n\nPolynomial in binary : for(i=0; i< cp; i++) cout<<p[i]; cout<<"\n\nGenerator in binary: for(i=0; i<cg; i++) cout<<g[i]; int s = cp + cg -1; // new size for(i=cp; i<s; i++) p[i] = 0; for(i=0; i<cp; i++) dup[i] = p[i]; for(i=0; i<cp; i++) { if(p[i]==1) { p[i] = p[i]^g[0]; p[i+1]=p[i+1]^g[1]; p[i+2]=p[i+2]^g[2]; p[i+3]=p[i+3]^g[3]; } else continue; } "; ";

for(i=0; i<s; i++) cout<<p[i]; if (flag==1) { if(p[s-1] ==0 ) p[s-1] = 1; else p[s-1]= 0; } for(i=cp; i<s; i++) dup[i] = p[i]; cout<<"\n\nNew polynomial to be transmitted: "; for(i=0; i<s; i++) cout<<dup[i]; cout<<"\n\nTRANSMITTED BY SENDER"; reciever(dup, s, gen); } void reciever(int*q, int s, int gen) { cout<<"\n\n\nIN RECIEVER"; cout<<"\nRecieved....\nDetecting errors"; int *g, cp, cg, i; g = tobinary(gen); cg = countbit(gen); cp = s - cg + 1; for(i=0; i<cp; i++) { if(q[i]==1) { q[i] = q[i]^g[0]; q[i+1]=q[i+1]^g[1]; q[i+2]=q[i+2]^g[2]; q[i+3]=q[i+3]^g[3]; } else continue; } int c = todecimal(q,s); if(c==0) cout<<"\n\nNO ERROR DETECTED"; else cout<<"\n\nERROR DETECTED"; }

void main() { int poly, gen; int ch; cout<<"\n\n-------WELCOME IN CRC--------"; cout<<"\nEnter a polynomial: "; cin>>poly; cout<<"Enter gen: "; cin>>gen; do { cout<<"\n\n-------ENTER YOUR CHOICE--------"; cout<<"\n1.Correct transmission"; cout<<"\n2. Transmission with errors"; cout<<"\n3. Exit\n"; cin>>ch; switch(ch) { case 1: sender(poly, gen, 0); break; case 2: sender(poly, gen, 1); break; } }while(ch>=1 && ch<=2); }

OUTPUT
-------WELCOME IN CRC-------Enter a polynomial: 85 Enter gen: 9 -------ENTER YOUR CHOICE-------1.Correct transmission 2. Transmission with errors 3. Exit 1

IN SENDER Polynomial in binary : Generator in binary: 1010101 1001

New polynomial to be transmitted: 1010101110 TRANSMITTED BY SENDER IN RECIEVER Recieved.... Detecting errors NO ERROR DETECTED -------ENTER YOUR CHOICE-------1.Correct transmission 2. Transmission with errors 3. Exit 2

IN SENDER Polynomial in binary : Generator in binary: 1010101 1001

New polynomial to be transmitted: 1010101111 TRANSMITTED BY SENDER IN RECIEVER

Recieved.... Detecting errors ERROR DETECTED -------ENTER YOUR CHOICE-------1.Correct transmission 2. Transmission with errors 3. Exit 3 Press any key to continue

//TO IMPLEMENT SELECTIVE REPEAT SLIDING WINDOW PROTOCOL

SOURCE CODE
#include <iostream> # include<conio.h> #include<stdlib.h> using namespace std; #include<math.h> # define tot_frames 20 int totfr[tot_frames]; int fs[8]; int se = 0; char *ack; int bits; void sender( int); void reciever(int); void input() { int num; cout<<"\n\nEnter the number of bits fr seq num: "; cin>>num; bits = pow(2, num); cout<<"\nNumber of frames to be sent: "<<bits; ack = new char[bits]; for(int i =0, len = 0; i<bits; i++) { totfr[i] = len; ack[i] = 'n'; len = (len +1 )% bits; } sender(bits); reciever(bits); } void sender(int b) { int flag = 0; cout<<"\n\n------------------------------"; for(int i = 0; i<b ; i++) { if(ack[i]=='n') {

fs[i] = totfr[i]; cout<<"\nSender: "<<fs[i]<<" Frame Sent"; } else if(ack[i]=='p') { fs[i] = totfr[i]; cout<<"\nRetransmitting "<<fs[i]; } else flag = 1; } if(flag==1) cout<<"\nfinished transmitting"; else reciever(b); } void reciever(int b) { int flag; int l,f; int c = b-1; cout<<"\n\n----------------------------------------"; for(int i = 0; i<b; i++) { if(ack[i]=='n') { flag = 0; f=rand()%c; if(i!=f) { cout<<"\nReciever: Frame "<<fs[i]<<" Recieved"; ack[i]='y'; } else { ack[i] = 'p'; l= rand()%2; if(l==0) cout<<"\nReciever: Frame "<<fs[i]<<" damaged, negative ack is sent"; else if(l==1) cout<<"\nReciever: Frame"<<fs[i]<<" Lost"; } } else if(ack[i]=='p') { cout<<"\nReciever: Frame "<<fs[i]<<" Recieved"; ack[i] = 'y'; flag = 1; }

} if(flag==0) { flag = 1; cout<<"\n\n\n*********TIMER TIME OUT**********\n\n\n"; sender(b); } } void main() { char ch; do { input(); cout<<"\n\nDo you want to continue? "; cin>>ch; }while(ch=='y'); }

OUTPUT
Enter the number of bits fr seq num: 3 Number of frames to be sent: 8 -----------------------------Sender: 0 Frame Sent Sender: 1 Frame Sent Sender: 2 Frame Sent Sender: 3 Frame Sent Sender: 4 Frame Sent Sender: 5 Frame Sent Sender: 6 Frame Sent Sender: 7 Frame Sent ---------------------------------------Reciever: Frame 0 Recieved Reciever: Frame 1 damaged, negative ack is sent Reciever: Frame 2 Recieved Reciever: Frame 3 Lost Reciever: Frame 4 Recieved Reciever: Frame 5 Recieved Reciever: Frame 6 Recieved Reciever: Frame 7 Recieved *********TIMER TIME OUT**********

-----------------------------Retransmitting 1 Retransmitting 3 finished transmitting ---------------------------------------Reciever: Frame 1 Recieved Reciever: Frame 3 Recieved Do you want to continue? y Enter the number of bits fr seq num: 2 Number of frames to be sent: 4 -----------------------------Sender: 0 Frame Sent Sender: 1 Frame Sent

Sender: 2 Frame Sent Sender: 3 Frame Sent ---------------------------------------Reciever: Frame 0 Recieved Reciever: Frame 1 Recieved Reciever: Frame 2 Recieved Reciever: Frame 3 Recieved *********TIMER TIME OUT**********

-----------------------------finished transmitting ---------------------------------------Do you want to continue? n Press any key to continue

//TO IMPLEMENT GO BACK N SLIDING WINDOW PROTOCOL

SOURCE CODE
#include <iostream> # include<conio.h> #include<stdlib.h> using namespace std; #include<math.h> # define tot_frames 20 int totfr[tot_frames]; int fs[8];

void sender( int, int); void reciever(int, int); void input() { int num; cout<<"\n\nEnter the number of bits fr seq num: "; cin>>num; int bits = pow(2, num); for(int i =0, len = 0; i<tot_frames; i++) { totfr[i] = len; len = (len +1 )% bits; } sender(bits, 0); } void sender(int b, int start) { cout<<"\n\nIN SENDER"; for(int i =start; i<b; i++) { fs[i] = totfr[i]; cout<<endl<<fs[i]<<" frame sent"; } reciever(b,0); }

void reciever(int b, int start) { cout<<"\n\nIN RECIEVER"; int f; f = rand()%5; int e1, e2,i; if(f==1) { e1 =start + rand()%b; cout<<endl<<e1<<" is the lost frame"; e2 = rand() % 2; if(e2==0) cout<<"\nFrame "<<fs[e1]<<" damaged"; else cout<<"\nFrame "<<fs[e1]<<" lost"; for(i=start; i<e1; i++) cout<<endl<<fs[i]<<" Recieved"; for(i = e1; i<b; i++) cout<<"\nLost Frame "<<fs[i]; start = e1; cout<<endl; } else { cout<<endl; for(int i =start; i<b; i++) { cout<<"Recieved frame "<<fs[i]<<endl;; } start = 0; } if(start!=0) { cout<<"\n\nTIMER TIME OUT...RETRANSMITTING FRAME"; sender(b, start); } } void main() { char ch; do { input(); cout<<"\n\nDo you want to continue? "; cin>>ch; }while(ch=='y'); }

OUTPUT
Enter the number of bits fr seq num: 3 IN SENDER 0 frame sent 1 frame sent 2 frame sent 3 frame sent 4 frame sent 5 frame sent 6 frame sent 7 frame sent IN RECIEVER 3 is the lost frame Frame 3 damaged 0 Recieved 1 Recieved 2 Recieved Lost Frame 3 Lost Frame 4 Lost Frame 5 Lost Frame 6 Lost Frame 7 TIMER TIME OUT...RETRANSMITTING FRAME IN SENDER 3 frame sent 4 frame sent 5 frame sent 6 frame sent 7 frame sent IN RECIEVER Recieved frame 3 Recieved frame 4 Recieved frame 5 Recieved frame 6 Recieved frame 7 Do you want to continue? y Enter the number of bits fr seq num: 2

IN SENDER 0 frame sent 1 frame sent 2 frame sent 3 frame sent IN RECIEVER Recieved frame 0 Recieved frame 1 Recieved frame 2 Recieved frame 3 Do you want to continue? n Press any key to continue

You might also like