修改计时器逻辑以完全模仿GBN算法
This commit is contained in:
parent
2de63a3dc8
commit
0e5c12ec75
@ -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()
|
||||
|
@ -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 = []
|
||||
|
Loading…
x
Reference in New Issue
Block a user