Programmieren eines Nachrichtensystems - Server
Aufgabe 1
Programmiere einen Server für unser Mailsystem. Der Server soll das auf der Seite Programmieren eines Nachrichtensystems - Protokoll vorgestellte Protokoll verwenden.
Tipps zu Aufgabe 1
In der Anfrage, die der Client an den Server schickt, werden Doppelpunkte zur Abtrennung verwendet. Der Server kann die Anfrage in ihre Teile zerlegen:
>>> anfrageStr = 'NEUE_NACHRICHT:Paul:Lara:Hallo Lara, viele Grüße von Paul'
>>> anfrageListe = anfrageStr.split(':')
>>> anfrageListe[0]
'NEUE_NACHRICHT'
>>> anfrageListe[1]
'Paul'
...
Die Nachrichten müssen auf dem Server gespeichert werden. Eine Nachricht kann man in einer Liste speichern:
>>> nachricht = ['Paul', 'Lara', 'Hallo Lara, viele Grüße von Paul']
>>> print('Absender: ' + nachricht[0])
>>> print('Empfänger: ' + nachricht[1])
>>> print('Text: ' + nachricht[2])
Der Server muss mehrere Nachrichten speichern. Dazu könnte man eine verschachtelte Liste (d.h. eine Liste, die weitere Listen enthält) verwenden:
nachrichten = [
['Paula', 'Lisa', 'Hallo'],
['Simon', 'Anna', 'Wie geht es dir?']
]
Suchen einer Nachricht:
# sucht in der Liste nachrichten eine Nachricht für empfaenger
# Rückgabe:
# Falls eine Nachricht gefunden: index der gefundenen Nachricht
# Falls keine Nachricht gefunden: -1
def findeNachrichtIndex(nachrichten, empfaenger):
anzahlNachrichten = len(nachrichten)
for i in range(anzahlNachrichten):
nachricht = nachrichten[i]
if nachricht[1] == empfaenger:
return i
return -1
Löschen einer Nachricht:
nachrichten = nachrichten[:indexNachricht] + nachrichten[(indexNachricht+1):]
Vertiefungsaufgaben:
- Bisher kann man beim erstellen einer neuen Nachricht einen beliebigen Absender eingeben. Der Server prüft nicht, ob die Nachricht wirklich von dem angegebenen Absender stammt. Erweitere das Mailsystem so, dass jeder Benutzer ein Passwort besitzt. Bei jeder Anfrage an den Server muss dieses Passwort mitgeschickt werden. Der Server soll damit prüfen, ob der Benutzer berechtigt ist, diese Anfrage zu stellen. Im einfachsten Fall stehen die Benutzernamen und Passwörter direkt im Quelltext des Servers.
-
Bisher liegen die Nachrichten auf dem Server im Klartext vor.
Der Betreiber des Servers könnte die Nachrichten also lesen.
Ändere den Client so ab, dass die Nachrichten Ende-zu-Ende-verschlüsselt werden.
D.h.: Eine Nachricht wird auf dem Client des Senders verschlüsselt. Auf dem Server liegt die Nachricht nur im Geheimtex vor. Die Nachricht wird erst auf dem Client wieder entschlüsselt. - Bisher speichert der Server die Daten in einer Liste im Arbeitsspeicher des Computers. Wird der Server beendet und anschließend wieder gestartet, ist diese Liste leer. Die Nachrichten gehen dabei also verloren. Ändere den Server so, dass die Nachrichten in einer Datenbank gespeichert werden.