修改计时器逻辑以完全模仿GBN算法

This commit is contained in:
typingbugs 2024-04-15 16:57:19 +08:00
parent 2de63a3dc8
commit 0e5c12ec75
2 changed files with 9 additions and 11 deletions

View File

@ -55,7 +55,7 @@ class Receiver:
if __name__ == "__main__":
max_seq_num = 20
networkLayer = NetworkLayer(host="172.29.68.245", port=23666)
networkLayer = NetworkLayer(host="192.168.31.197", port=23666)
applicationLayer = ApplicationLayer()
receiver = Receiver(networkLayer, applicationLayer)
while True:
@ -63,7 +63,7 @@ if __name__ == "__main__":
if message:
seq_num, data = receiver.extract(message)
receiver.deliver_data(data, seq_num)
if receiver.expected_seq_num == max_seq_num:
if receiver.expected_seq_num > max_seq_num:
break
print("序列传输完成。")
networkLayer.close()

View File

@ -6,8 +6,6 @@ class Package:
def __init__(self, data:str, seq_num:int) -> None:
self.data = data
self.seq_num = seq_num
self.send_time = None
class ApplicationLayer:
def __init__(self, data_len:int=5000) -> None:
@ -52,7 +50,7 @@ class Sender:
self.next_seq_num = 1
self.timeout_ms = timeout_ms
self.networkLayer = networkLayer
self.timer = False
self.timer = None
def rdt_send(self, data:str) -> bool:
if self.next_seq_num > max_seq_num:
@ -65,9 +63,8 @@ class Sender:
self.package_list[self.next_seq_num].data,
self.package_list[self.next_seq_num].seq_num
)
self.package_list[self.next_seq_num].send_time = time.time()
if self.base_num == self.next_seq_num:
self.timer = True
self.timer = time.time()
self.next_seq_num += 1
return True
@ -77,9 +74,10 @@ class Sender:
print(f"(ACK={ack_index}) < (base={self.base_num})ACK失效丢弃。")
return
self.base_num = ack_index + 1
self.timer = time.time()
if self.base_num == self.next_seq_num:
print(f"将base_num设置为下一个序列编号。")
self.timer = False
self.timer = None
else:
print(f"将base_num设置为{self.package_list[self.base_num].seq_num}")
@ -93,9 +91,9 @@ class Sender:
print()
def is_timeout(self) -> bool:
if self.timer is False:
if self.timer is None:
return False
return time.time() - self.package_list[self.base_num].send_time >= 0.001 * self.timeout_ms
return time.time() - self.timer >= 0.001 * self.timeout_ms
def gbn(self):
seq_index = self.base_num
@ -104,8 +102,8 @@ class Sender:
self.package_list[seq_index].data,
self.package_list[seq_index].seq_num
)
self.package_list[seq_index].send_time = time.time()
seq_index += 1
self.timer = time.time()
def show_gbn(self) -> list[int]:
show = []