3.
Implementation of Sliding Window Protocol Select Repeat ARQ
Aim : Implementation of Sliding Window Protocol Select Repeat ARQ
Program
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define WINDOW_SIZE 4
#define FRAME_COUNT 8
// Data structure for frames
typedef struct {
int sequence_number;
bool is_acknowledged;
char data;
} Frame;
// Sender function
void sender(Frame frames[], int total_frames) {
int base = 0;
int next_seq = 0;
while (base < total_frames) {
// Send frames in the window
for (int i = base; i < base + WINDOW_SIZE && i < total_frames; i++) {
if (!frames[i].is_acknowledged) {
printf("Sending frame %d: %c\n", frames[i].sequence_number, frames[i].data);
// Simulate acknowledgment reception
int ack;
printf("Enter the last acknowledged frame number (or -1 to exit): ");
scanf("%d", &ack);
if (ack == -1) {
break;
// Mark frames as acknowledged
for (int i = base; i <= ack; i++) {
frames[i].is_acknowledged = true;
// Slide the window
while (base < total_frames && frames[base].is_acknowledged) {
base++;
// Receiver function
void receiver(Frame frames[], int total_frames) {
for (int i = 0; i < total_frames; i++) {
printf("Received frame %d: %c\n", frames[i].sequence_number, frames[i].data);
int main() {
Frame frames[FRAME_COUNT];
// Initialize frames with data and sequence numbers
for (int i = 0; i < FRAME_COUNT; i++) {
frames[i].sequence_number = i;
frames[i].is_acknowledged = false;
frames[i].data = 'A' + i;
printf("Sender:\n");
sender(frames, FRAME_COUNT);
printf("\nReceiver:\n");
receiver(frames, FRAME_COUNT);
return 0;
Sender:
Sending frame 0: A
Sending frame 1: B
Sending frame 2: C
Sending frame 3: D
Enter the last acknowledged frame number (or -1 to exit): 2
Sending frame 3: D
Sending frame 4: E
Sending frame 5: F
Sending frame 6: G
Enter the last acknowledged frame number (or -1 to exit): 5
Sending frame 6: G
Sending frame 7: H
Enter the last acknowledged frame number (or -1 to exit): 7
Receiver:
Received frame 0: A
Received frame 1: B
Received frame 2: C
Received frame 3: D
Received frame 4: E
Received frame 5: F