You are on page 1of 8

DIGITAL ASSIGNMENT 2

BCSE308P
COMPUTER NETWORKS

Name: Harshil Nanda


Reg No: 21BCE0918
Exercise -2

1.Write a C/C++/Java/Python program to apply


stop and wait flow control.

Code:
import time
def send_packet(packet):
# Simulate packet transmission delay
time.sleep(1)
return packet
def receive_packet(packet):
# Simulate packet processing delay
time.sleep(1)
return packet
def send_ack(ack):
# Simulate acknowledgment transmission delay
time.sleep(1)
return ack
def receive_ack():
# Simulate acknowledgment processing delay
time.sleep(1)
return True
def stop_and_wait_flow_control(sender_packets):
for packet in sender_packets:
while True:
received_packet = send_packet(packet)
received_ack = receive_ack()
if received_ack:
break
if __name__ == '__main__':
sender_packets = ['Packet1', 'Packet2', 'Packet3', 'Packet4',
'Packet5']
stop_and_wait_flow_control(sender_packets)

Output:
2. Write a C/C++/Java/Python program to
implement the following sliding window
a. Go back n
b. Selective repeat

Code:
import time

# Simulated packet transmission delay


PACKET_TRANSMISSION_DELAY = 1

# Simulated acknowledgment transmission delay


ACK_TRANSMISSION_DELAY = 1

class Sender:
def __init__(self, window_size, total_packets):
self.window_size = window_size
self.total_packets = total_packets
self.next_seq_num = 0
self.base = 0

def send_packet(self, packet):


# Simulate packet transmission delay
time.sleep(PACKET_TRANSMISSION_DELAY)
print("Sender: Sending packet", packet)

def send_ack(self, ack):


# Simulate acknowledgment transmission delay
time.sleep(ACK_TRANSMISSION_DELAY)
print("Sender: Sending acknowledgment", ack)

def go_back_n(self):
while self.base < self.total_packets:
for i in range(self.base, min(self.base + self.window_size,
self.total_packets)):
self.send_packet(i)

time.sleep(ACK_TRANSMISSION_DELAY) # Simulate
waiting for acknowledgments

if self.base < self.total_packets:


self.base += self.window_size
print("Sender: Acknowledgment received. Base
updated to", self.base)

class Receiver:
def __init__(self, window_size, total_packets):
self.window_size = window_size
self.total_packets = total_packets
self.expected_seq_num = 0

def receive_packet(self, packet):


# Simulate packet processing delay
time.sleep(PACKET_TRANSMISSION_DELAY)
print("Receiver: Receiving packet", packet)

def send_ack(self, ack):


# Simulate acknowledgment transmission delay
time.sleep(ACK_TRANSMISSION_DELAY)
print("Receiver: Sending acknowledgment", ack)

def selective_repeat(self):
while self.expected_seq_num < self.total_packets:
for i in range(self.expected_seq_num,
min(self.expected_seq_num + self.window_size,
self.total_packets)):
self.receive_packet(i)
self.send_ack(i)
time.sleep(ACK_TRANSMISSION_DELAY) # Simulate
waiting for acknowledgments

self.expected_seq_num += self.window_size
print("Receiver: Acknowledgment received. Expected
sequence number updated to", self.expected_seq_num)

if __name__ == '__main__':
window_size = 3
total_packets = 10

sender = Sender(window_size, total_packets)


receiver = Receiver(window_size, total_packets)

print("Go-Back-N Sliding Window Protocol:")


sender.go_back_n()

print("\nSelective Repeat Sliding Window Protocol:")


receiver.selective_repeat()
Output:

You might also like