Erkundung - Sockets auf dem Server
Auf dieser Seite lernst du, wie man einen Server programmiert.
Dabei wirst du einen Zeitserver und einen Echoserver programmieren.
Aufgabe 1
Im Folgenden sind zwei Python-Dialoge dargestellt, die zeitgleich ausgeführt werden.
Der linke Dialog stellt einen Client dar. Er kommuniziert mit dem Server, der auf der rechten Seite dargestellt ist.
Auf dem Client gibt es lediglich einen Socket (den Kommunikationssocket komm_s
).
Über diesen Socket können wir Daten empfangen und senden.
- Wie viele Sockets gibt es auf dem Server?
- Wozu werden diese Sockets auf dem Server verwendet?
- Vergleiche mit dem Client!
Tipp: Wenn du möchtest, kannst du diese Dialoge auch ausführen.
Du musst Thonny dazu zwei mal öffnen und in beiden Thonny-Instanzen zunächst die Datei socketLib.py ausführen,
damit du die Klassen ISocket
und IVerbindungssocket
verwenden kannst.
Eine Thonny-Instanz dient also Client, die andere als Server.
Client |
Server |
|
>>> from socketLib import IVerbindungssocket
>>> # Verbindungssocket erzeugen
>>> verbindungs_s = IVerbindungssocket()
>>> # Der Verbindungssocket soll auf Port 5000
>>> # auf eingehende Verbindungen warten
>>> verbindungs_s.anPortBinden(5000)
>>> # Verbindung annehmen
>>> # (wartet, bis ein Client eine Verbindung aufbaut)
>>> komm_s = verbindungs_s.verbindungAnnehmen()
|
>>> from socketLib import ISocket
>>> # Kommunikationssocket erzeugen
>>> komm_s = ISocket()
>>> # Verbindung aufbauen
>>> komm_s.verbinden('127.0.0.1', 5000)
|
|
|
>>> # Daten des Clients empfangen
>>> # (wartet, bis der Client Daten
>>> # und das Byte 0 gesendet hat)
>>> anfrageStr = komm_s.empfangeStrBis(0)
|
>>> anfrageStr = 'Wie gehts?'
>>> komm_s.sendeStr(anfrageStr)
>>> komm_s.sendeBytes([0])
>>> # Daten des Servers empfangen
>>> # (wartet, bis der Server Daten
>>> # und das TrennByte gesendet hat)
>>> antwortStr = komm_s.empfangeStrBis(0)
|
|
|
>>> print(anfrageStr)
'Wie gehts?'
>>> antwortStr = 'Danke, gut!'
>>> komm_s.sendeStr(antwortStr)
>>> komm_s.sendeBytes([0])
|
>>> print(antwortStr)
'Danke, gut!'
|
|
>>> komm_s.trennen()
|
>>> komm_s.trennen()
>>> verbindungs_s.trennen()
|