Slective and Stop and Wait
Slective and Stop and Wait
1)Selective :-
#include<stdio.h>
#include<stdlib.h>
#define RTT 5
#ifdef __unix__
# include <unistd.h>
#elif defined _WIN32
# include <windows.h>
#define sleep(x) Sleep(1000 * (x))
#endif
int main()
{
int window_size,i,f,frames[50];
printf("Enter window size: ");
scanf("%d",&window_size);
printf("\nEnter number of frames to transmit: ");
scanf("%d",&f);
printf("\nEnter %d frames: ",f);
for(i=1;i<=f;i++)
scanf("%d",&frames[i]);
printf("\nAfter sending %d frames at each stage sender waits for ACK",window_size);
printf("\nSending frames in the following manner... \n\n");
for(i=1;i<=f;i++)
{
if(i%window_size!=0)
{
printf("%d",frames[i]);
}
else
{
printf("%d\n",frames[i]);
printf("SENDER:waiting for ACK...\n\n");
sleep(RTT/2);
printf("RECEIVER: Frames Received, ACK Sent\n");
printf(" \n");
sleep(RTT/2);
printf("SENDER:ACK received, sending next frames\n");
}
}
if(f%window_size!=0)
{
printf("\nSENDER: waiting for ACK...\n");
sleep(RTT/2);
printf("\nRECEIVER:Frames Received, ACK Sent\n");
printf(" \n");
sleep(RTT/2);
printf("SENDER:ACK received.");
}
return 0;
}
Output :-
#include <stdio.h>
#include <stdlib.h>
#define RTT 4
#define TIMEOUT 4
#define TOT_FRAMES 7
#ifdef __unix__
# include <unistd.h>
#elif defined _WIN32
# include <windows.h>
#define sleep(x) Sleep(1000 * (x))
#endif
enum {NO,YES}
ACK;
int main()
{
int wait_time,i=1;
ACK=YES;
for(;i<=TOT_FRAMES;)
{
if (ACK==YES && i!=1)
{
printf("\nSENDER: ACK for Frame %d Received.\n",i-1);
}
printf("\nSENDER: Frame %d sent, Waiting for ACK...\n",i);
ACK=NO;
wait_time= rand()% 4+1;
if(wait_time==TIMEOUT)
{
printf("SENDER: ACK not received for Frame %d=>TIMEOUT Resending Frame...",i);
}
else
{
sleep(RTT);
printf("\nRECEIVER: Frame %d received, ACK sent\n",i); printf(" ");
ACK=YES;
i++;
}
}
return 0;
}
Output :-