import socket, structdef berechne(op, zahlen): if op == 'SUM': return sum(zahlen) elif op == 'PRO': result = 1 for z in zahlen: result *= z return result elif op == 'MIN': return min(zahlen) elif op == 'MAX': return max(zahlen)server_ip = '127.0.0.1'server_port = 50000sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)sock.bind((server_ip, server_port))sock.listen(1)conn, addr = sock.accept()data = conn.recv(1024)id = struct.unpack('!I', data[:4])[0] # IDop = data[4:7].decode('utf-8') # SUM, PRO, ...n = struct.unpack('!B', data[7:8])[0] # Anzahl der Zahlenzahlen = [struct.unpack('!i', data[8 + i*4:12 + i*4])[0] for i in range(n)] # Zahlen in Format <z1><z2><z3>...result = berechne(op, zahlen)antwort = struct.pack('!Ii', id, result)conn.send(antwort)
Für jedes gesendete Paket bestimmen, welcher Befehl in welchem Skript (Client/Server) dafür verantwortlich ist, dass das Paket gesendet wird
Pakettyp
Befehl im Code
Datei
Client → Server (Daten senden)
sock.send(msg)
echo_client_tcp.py
Server → Client (Antwort senden)
conn.send(antwort)
dein Rechenserver
TCP-Handshake (SYN/SYN-ACK/ACK)
sock.connect(...) beim Client + accept() beim Server
beide
für jeden blockierenden Befehl (connect, accept, recv) bestimmen, die Ankunft welches Pakets dafür verantwortlich ist, dass die Ausführung des Befehls vervollständigt wird