/* Stop-and-Wait ARQ Protocol Simulation (C Version) ------------------------------------------------ - Sender sends one frame at a time with sequence number (0/1) - Receiver sends ACK for correctly received frame - If ACK not received within timeout, sender retransmits - Simulates random frame loss/corruption Author: (Your Name) */ #include <stdio.h> #include <stdlib.h> #include <time.h> #define TIMEOUT 3 #define MAX_FRAMES 10 // Simulate probability of frame/ACK loss or corruption float LOSS_PROB = 0.2; // 20% chance float CORR_PROB = 0.1; // 10% chance // Function to simulate random loss/corruption int is_lost(float prob) { return ((float)rand() / RAND_MAX) < prob; } int main() { srand(time(NULL)); int frame_no = 0; int seq = 0; // sequence number (0/1) int retransmissions = 0; printf("\n--- Stop-and-Wait ARQ Protocol Simulation ---\n\n"); while(frame_no < MAX_FRAMES) { printf("Sender: Sending frame %d (seq=%d)\n", frame_no+1, seq); // Simulate if frame is lost or corrupted if(is_lost(LOSS_PROB)) { printf("Channel: Frame LOST!\n"); } else if(is_lost(CORR_PROB)) { printf("Channel: Frame CORRUPTED!\n"); } else { printf("Receiver: Frame %d received successfully. Sending ACK %d\n", frame_no+1, seq); // Simulate if ACK is lost if(is_lost(LOSS_PROB)) { printf("Channel: ACK LOST!\n"); } else { printf("Sender: ACK %d received. Moving to next frame.\n\n", seq); seq = 1 - seq; // flip sequence number frame_no++; continue; // go to next frame } } // Timeout occurs, retransmit frame printf("Sender: Timeout! Retransmitting frame %d (seq=%d)\n\n", frame_no+1, seq); retransmissions++; } printf("\nSimulation complete. Total retransmissions: %d\n", retransmissions); return 0; }
Standard input is empty
--- Stop-and-Wait ARQ Protocol Simulation --- Sender: Sending frame 1 (seq=0) Receiver: Frame 1 received successfully. Sending ACK 0 Channel: ACK LOST! Sender: Timeout! Retransmitting frame 1 (seq=0) Sender: Sending frame 1 (seq=0) Receiver: Frame 1 received successfully. Sending ACK 0 Sender: ACK 0 received. Moving to next frame. Sender: Sending frame 2 (seq=1) Receiver: Frame 2 received successfully. Sending ACK 1 Sender: ACK 1 received. Moving to next frame. Sender: Sending frame 3 (seq=0) Receiver: Frame 3 received successfully. Sending ACK 0 Channel: ACK LOST! Sender: Timeout! Retransmitting frame 3 (seq=0) Sender: Sending frame 3 (seq=0) Receiver: Frame 3 received successfully. Sending ACK 0 Sender: ACK 0 received. Moving to next frame. Sender: Sending frame 4 (seq=1) Receiver: Frame 4 received successfully. Sending ACK 1 Sender: ACK 1 received. Moving to next frame. Sender: Sending frame 5 (seq=0) Channel: Frame LOST! Sender: Timeout! Retransmitting frame 5 (seq=0) Sender: Sending frame 5 (seq=0) Receiver: Frame 5 received successfully. Sending ACK 0 Sender: ACK 0 received. Moving to next frame. Sender: Sending frame 6 (seq=1) Channel: Frame LOST! Sender: Timeout! Retransmitting frame 6 (seq=1) Sender: Sending frame 6 (seq=1) Receiver: Frame 6 received successfully. Sending ACK 1 Channel: ACK LOST! Sender: Timeout! Retransmitting frame 6 (seq=1) Sender: Sending frame 6 (seq=1) Channel: Frame LOST! Sender: Timeout! Retransmitting frame 6 (seq=1) Sender: Sending frame 6 (seq=1) Receiver: Frame 6 received successfully. Sending ACK 1 Channel: ACK LOST! Sender: Timeout! Retransmitting frame 6 (seq=1) Sender: Sending frame 6 (seq=1) Channel: Frame LOST! Sender: Timeout! Retransmitting frame 6 (seq=1) Sender: Sending frame 6 (seq=1) Receiver: Frame 6 received successfully. Sending ACK 1 Channel: ACK LOST! Sender: Timeout! Retransmitting frame 6 (seq=1) Sender: Sending frame 6 (seq=1) Receiver: Frame 6 received successfully. Sending ACK 1 Sender: ACK 1 received. Moving to next frame. Sender: Sending frame 7 (seq=0) Receiver: Frame 7 received successfully. Sending ACK 0 Channel: ACK LOST! Sender: Timeout! Retransmitting frame 7 (seq=0) Sender: Sending frame 7 (seq=0) Receiver: Frame 7 received successfully. Sending ACK 0 Sender: ACK 0 received. Moving to next frame. Sender: Sending frame 8 (seq=1) Channel: Frame LOST! Sender: Timeout! Retransmitting frame 8 (seq=1) Sender: Sending frame 8 (seq=1) Channel: Frame LOST! Sender: Timeout! Retransmitting frame 8 (seq=1) Sender: Sending frame 8 (seq=1) Receiver: Frame 8 received successfully. Sending ACK 1 Channel: ACK LOST! Sender: Timeout! Retransmitting frame 8 (seq=1) Sender: Sending frame 8 (seq=1) Receiver: Frame 8 received successfully. Sending ACK 1 Sender: ACK 1 received. Moving to next frame. Sender: Sending frame 9 (seq=0) Receiver: Frame 9 received successfully. Sending ACK 0 Sender: ACK 0 received. Moving to next frame. Sender: Sending frame 10 (seq=1) Receiver: Frame 10 received successfully. Sending ACK 1 Sender: ACK 1 received. Moving to next frame. Simulation complete. Total retransmissions: 13