初步完成lab3代码

This commit is contained in:
2024-04-03 01:56:44 +08:00
parent 341d753c76
commit 4b06b2f9b3
2 changed files with 173 additions and 0 deletions

58
Labs/Lab3/src/Receiver.py Normal file
View File

@@ -0,0 +1,58 @@
import socket
import random
class NetworkLayer:
def __init__(self, host="0.0.0.0", port=31415) -> None:
self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.socket.connect((host, port))
def udt_send(self, data:str):
self.socket.send(data.encode())
def udt_rcv(self) -> str:
while True:
message = self.socket.recv(1024).decode("utf-8")
return message
class ApplicationLayer:
def __init__(self) -> None:
self.data = list()
class Receiver:
def __init__(self, networkLayer:NetworkLayer, applicationLayer:ApplicationLayer):
self.expected_seq_num = 0
self.networkLayer = networkLayer
self.applicationLayer = applicationLayer
def deliver_data(self, data, seq_num):
if seq_num == self.expected_seq_num:
self.applicationLayer.data.append(data)
self.udt_send(seq_num)
self.expected_seq_num += 1
else:
self.udt_send(self.expected_seq_num - 1)
def udt_send(self, ack_num):
if random.random() > 0.2:
self.networkLayer.socket.send(str(ack_num).encode())
def extract(self, message:str):
parts = message.split(" ")
seq_num = int(parts[0])
data = parts[1]
return seq_num, data
if __name__ == "__main__":
networkLayer = NetworkLayer()
applicationLayer = ApplicationLayer()
receiver = Receiver(networkLayer, applicationLayer)
while True:
message = networkLayer.udt_rcv()
if message:
seq_num, data = receiver.extract(message)
receiver.deliver_data(data, seq_num)