修改计时器逻辑以完全模仿GBN算法
This commit is contained in:
parent
2de63a3dc8
commit
0e5c12ec75
@ -55,7 +55,7 @@ class Receiver:
|
|||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
max_seq_num = 20
|
max_seq_num = 20
|
||||||
networkLayer = NetworkLayer(host="172.29.68.245", port=23666)
|
networkLayer = NetworkLayer(host="192.168.31.197", port=23666)
|
||||||
applicationLayer = ApplicationLayer()
|
applicationLayer = ApplicationLayer()
|
||||||
receiver = Receiver(networkLayer, applicationLayer)
|
receiver = Receiver(networkLayer, applicationLayer)
|
||||||
while True:
|
while True:
|
||||||
@ -63,7 +63,7 @@ if __name__ == "__main__":
|
|||||||
if message:
|
if message:
|
||||||
seq_num, data = receiver.extract(message)
|
seq_num, data = receiver.extract(message)
|
||||||
receiver.deliver_data(data, seq_num)
|
receiver.deliver_data(data, seq_num)
|
||||||
if receiver.expected_seq_num == max_seq_num:
|
if receiver.expected_seq_num > max_seq_num:
|
||||||
break
|
break
|
||||||
print("序列传输完成。")
|
print("序列传输完成。")
|
||||||
networkLayer.close()
|
networkLayer.close()
|
||||||
|
@ -6,8 +6,6 @@ class Package:
|
|||||||
def __init__(self, data:str, seq_num:int) -> None:
|
def __init__(self, data:str, seq_num:int) -> None:
|
||||||
self.data = data
|
self.data = data
|
||||||
self.seq_num = seq_num
|
self.seq_num = seq_num
|
||||||
self.send_time = None
|
|
||||||
|
|
||||||
|
|
||||||
class ApplicationLayer:
|
class ApplicationLayer:
|
||||||
def __init__(self, data_len:int=5000) -> None:
|
def __init__(self, data_len:int=5000) -> None:
|
||||||
@ -52,7 +50,7 @@ class Sender:
|
|||||||
self.next_seq_num = 1
|
self.next_seq_num = 1
|
||||||
self.timeout_ms = timeout_ms
|
self.timeout_ms = timeout_ms
|
||||||
self.networkLayer = networkLayer
|
self.networkLayer = networkLayer
|
||||||
self.timer = False
|
self.timer = None
|
||||||
|
|
||||||
def rdt_send(self, data:str) -> bool:
|
def rdt_send(self, data:str) -> bool:
|
||||||
if self.next_seq_num > max_seq_num:
|
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].data,
|
||||||
self.package_list[self.next_seq_num].seq_num
|
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:
|
if self.base_num == self.next_seq_num:
|
||||||
self.timer = True
|
self.timer = time.time()
|
||||||
self.next_seq_num += 1
|
self.next_seq_num += 1
|
||||||
return True
|
return True
|
||||||
|
|
||||||
@ -77,9 +74,10 @@ class Sender:
|
|||||||
print(f"(ACK={ack_index}) < (base={self.base_num}),ACK失效丢弃。")
|
print(f"(ACK={ack_index}) < (base={self.base_num}),ACK失效丢弃。")
|
||||||
return
|
return
|
||||||
self.base_num = ack_index + 1
|
self.base_num = ack_index + 1
|
||||||
|
self.timer = time.time()
|
||||||
if self.base_num == self.next_seq_num:
|
if self.base_num == self.next_seq_num:
|
||||||
print(f"将base_num设置为下一个序列编号。")
|
print(f"将base_num设置为下一个序列编号。")
|
||||||
self.timer = False
|
self.timer = None
|
||||||
else:
|
else:
|
||||||
print(f"将base_num设置为{self.package_list[self.base_num].seq_num}。")
|
print(f"将base_num设置为{self.package_list[self.base_num].seq_num}。")
|
||||||
|
|
||||||
@ -93,9 +91,9 @@ class Sender:
|
|||||||
print()
|
print()
|
||||||
|
|
||||||
def is_timeout(self) -> bool:
|
def is_timeout(self) -> bool:
|
||||||
if self.timer is False:
|
if self.timer is None:
|
||||||
return False
|
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):
|
def gbn(self):
|
||||||
seq_index = self.base_num
|
seq_index = self.base_num
|
||||||
@ -104,8 +102,8 @@ class Sender:
|
|||||||
self.package_list[seq_index].data,
|
self.package_list[seq_index].data,
|
||||||
self.package_list[seq_index].seq_num
|
self.package_list[seq_index].seq_num
|
||||||
)
|
)
|
||||||
self.package_list[seq_index].send_time = time.time()
|
|
||||||
seq_index += 1
|
seq_index += 1
|
||||||
|
self.timer = time.time()
|
||||||
|
|
||||||
def show_gbn(self) -> list[int]:
|
def show_gbn(self) -> list[int]:
|
||||||
show = []
|
show = []
|
||||||
|
Loading…
x
Reference in New Issue
Block a user