Logo des digitalen Schulbuchs inf-schule.de. Schriftzug in Zustandsübergangsdiagramm eines endlichen Automaten.

Implementierung des Protokolls

Schlüsselwörter

Wie du gesehen hast, regelt das Protokoll die Kommunikation zwischen Server- und Clientprogramm. Wir wollen für das Serverprogramm und das Clientprogramm das gleiche Protokollprogramm verwenden.

Aufgabe 1

Überlege dir welche Kommunikationszustände es bei den einzelnen Programmen gibt. Gibt es gleiche Zustände in den Programmen?

Wie in den Diagrammen deutlich gemacht wird, werden die Programmzustände durch Schlüsselwörter in den Nachrichten mitgesendet. Jetzt sollte geklärt werden, welche Schlüsselwörter verwendet werden und was diese bedeuten.

Aufgabe 2

Definiere die Schlüsselwörter des Protokolls in Python.

Schreibe eine Methode decode(msg), die ein Paket aus Schlüsselwort und Nachricht als Argument erhält und den Programmzustand und die Nachricht getrennt zurückgibt.

Schreibe eine Methode encode(zustand ,msg), die die zwei Argumente Zustand und Nachricht erhält und ein Paket aus Schlüsselwort und Nachricht zurückgibt.

Hinweis: Die Funktionen sollen allen möglichen Zustände verarbeiten können.

Lösungsvorschlag

HALLO        = b'Hallo'         # Client -> Server 
JA           = b'Ja'            # Client <- Server
NEIN         = b'Nein'          # Client <- Server
WARTE        = b''              # Client <-> Server
ENDE         = b'Ende'          # Client <- Server 

def decode(msg):
    if msg[:len(HALLO)] == HALLO:
        name =msg
        return (HALLO, name.decode())
    if msg[:len(JA)] == JA:
        return (JA,)
    if msg[:len(WARTE)] == WARTE:
        eingabe = msg
        return (WARTE,eingabe.decode())
    if msg[:len(ENDE)] == ENDE:
        return (ENDE,) + versuche
    return (NEIN,)

def encode(zustand, args=None):
    if zustand == HALLO:
        name = ''.join(str(i) for i  in args)
        return HALLO + name.encode()
    if zustand ==  JA:
        return JA
    if zustand == WARTE:
        antwort = ''.join(str(i) for i in args)
        return WARTE + antwort.encode()
    if zustand == ENDE:
        return ENDE
    return NEIN
X

Fehler melden

X

Suche