Simplex Stop-and-Wait Protocol for Noisy Channels
Simplex Stop-and-Wait Protocol (One-bit) for Noisy Channels using Socket Programming in Python
1. Objective
To implement the Simplex Stop-and-Wait protocol using socket programming, where the sender and receiver
communicate over a simulated noisy channel, with basic error handling, acknowledgments, and
retransmissions.
2. Overview of Protocol
- Stop-and-Wait is a flow control protocol.
- Only one frame is sent at a time.
- After sending, the sender waits for an acknowledgment (ACK).
- If no ACK is received within a timeout or a corrupted ACK is received, the frame is resent.
- The receiver uses sequence numbers (0 and 1) to detect duplicate frames.
3. Components
a) server.py - Receiver
- Listens for incoming frames.
- Simulates frame corruption/loss using random chance.
- Sends ACK based on sequence number.
b) client.py - Sender
- Sends frames to the receiver.
- Waits for the correct ACK before sending the next frame.
- Retransmits on timeout or incorrect ACK.
4. Execution Steps
1. Open Terminal 1 and run the receiver:
python server.py
2. Open Terminal 2 and run the sender:
python client.py
Page 1
Simplex Stop-and-Wait Protocol for Noisy Channels
5. Code Explanation
server.py
- Import socket, random, time
- Define HOST and PORT
- Simulate noise and flip bits
- Create TCP socket and wait for connection
- On receiving frame, simulate loss, extract sequence and data, check for correctness, send ACK
client.py
- Define frames to send and initial sequence
- Connect to receiver using TCP
- For each frame, send, wait for ACK, retransmit if timeout
6. Sample Output
Sender Output:
Sender: Sending frame: 0Hello
Sender: Received ACK: 0
Sender: Sending frame: 1World
Sender: Timeout! Resending frame.
Sender: Received ACK: 1
Receiver Output:
Receiver: Connected by ('127.0.0.1', 45678)
Receiver: Received frame: 0Hello
Receiver: Data accepted: Hello
Receiver: Sent ACK: 0
7. Enhancements (Optional)
Page 2
Simplex Stop-and-Wait Protocol for Noisy Channels
- Add checksum for real error detection.
- Simulate bidirectional data (Full Duplex).
- Use GUI or file transfer support.
8. Conclusion
This implementation demonstrates a robust Stop-and-Wait protocol with noisy channel simulation, using
socket programming in Python. It provides insights into flow control, error handling, and retransmission
strategies used in real-world communication protocols like TCP.
Page 3