fork download
  1. /*
  2.  Stop-and-Wait ARQ Protocol Simulation (C Version)
  3.  ------------------------------------------------
  4.  - Sender sends one frame at a time with sequence number (0/1)
  5.  - Receiver sends ACK for correctly received frame
  6.  - If ACK not received within timeout, sender retransmits
  7.  - Simulates random frame loss/corruption
  8.  
  9.  Author: (Your Name)
  10. */
  11.  
  12. #include <stdio.h>
  13. #include <stdlib.h>
  14. #include <time.h>
  15.  
  16. #define TIMEOUT 3
  17. #define MAX_FRAMES 10
  18.  
  19. // Simulate probability of frame/ACK loss or corruption
  20. float LOSS_PROB = 0.2; // 20% chance
  21. float CORR_PROB = 0.1; // 10% chance
  22.  
  23. // Function to simulate random loss/corruption
  24. int is_lost(float prob) {
  25. return ((float)rand() / RAND_MAX) < prob;
  26. }
  27.  
  28. int main() {
  29. srand(time(NULL));
  30.  
  31. int frame_no = 0;
  32. int seq = 0; // sequence number (0/1)
  33. int retransmissions = 0;
  34.  
  35. printf("\n--- Stop-and-Wait ARQ Protocol Simulation ---\n\n");
  36.  
  37. while(frame_no < MAX_FRAMES) {
  38. printf("Sender: Sending frame %d (seq=%d)\n", frame_no+1, seq);
  39.  
  40. // Simulate if frame is lost or corrupted
  41. if(is_lost(LOSS_PROB)) {
  42. printf("Channel: Frame LOST!\n");
  43. } else if(is_lost(CORR_PROB)) {
  44. printf("Channel: Frame CORRUPTED!\n");
  45. } else {
  46. printf("Receiver: Frame %d received successfully. Sending ACK %d\n", frame_no+1, seq);
  47.  
  48. // Simulate if ACK is lost
  49. if(is_lost(LOSS_PROB)) {
  50. printf("Channel: ACK LOST!\n");
  51. } else {
  52. printf("Sender: ACK %d received. Moving to next frame.\n\n", seq);
  53. seq = 1 - seq; // flip sequence number
  54. frame_no++;
  55. continue; // go to next frame
  56. }
  57. }
  58.  
  59. // Timeout occurs, retransmit frame
  60. printf("Sender: Timeout! Retransmitting frame %d (seq=%d)\n\n", frame_no+1, seq);
  61. retransmissions++;
  62. }
  63.  
  64. printf("\nSimulation complete. Total retransmissions: %d\n", retransmissions);
  65. return 0;
  66. }
  67.  
Success #stdin #stdout 0s 5284KB
stdin
Standard input is empty
stdout
--- 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