Senden und empfangen
Sockets übertragen Bytes
Wenn eine Verbindung zwischen einem Client und einem Server besteht, können Client und Server Daten senden. Die Verbindung zwischen den Sockets kann Bytes von einem Socket zu dem anderen Socket übertragen.
Ein Bytes besteht aus 8 Bits. Oft gibt man ein Byte jedoch als Zahl im Zehnersystem an. Dazu fasst man die 8 Bits als Binärzahl auf und rechnet diese Zahl in das Zehnersystem um. Für ein Byte erhält man eine Zahl, die mindestens 0 und höchstens 255 ist.
Aufgabe 1
-
Schreibe die folgende Bitfolge, bei der es sich um ein Byte handelt, im Zehnersystem:
11010001
-
Das folgende Byte ist im Zehnersystem angegeben. Schreibe es als Bitfolge:
42
- Begründe: Schreibt man ein Byte im Zehnersystem, so ist die kleinsmögliche Zahl die 0.
- Begründe: Schreibt man ein Byte im Zehnersystem, so ist die größtmögliche Zahl die 255.
Der Empfangspuffer
Wenn eine Verbindung zwischen einem Client und einem Server besteht, können Client und Server Daten senden.
Mit dem Befehl komm_s.sendeBytes
kann eine Liste von Bytes gesendet werden:
Ankommende Bytes werden bei dem Empfänger zunächst in einem Empfangspuffer gespeichert. Dies ist ein Speicherbereich, in dem die Bytes gespeichert werden, bis sie vom Empfänger gelesen werden. Bytes, die neu ankommen, werden im Empfangspuffer hingen angehängt.
Aufgabe 2
In einem Empfangspuffer befinden sich die Bytes [72, 73]. Zusätzlich werden die Bytes [80, 81] empfangen. Gib den neuen Inhalt des Empfangspuffers an.
Mit dem Befehl komm_s.empfangeBis(0)
können Bytes aus dem Empfangspuffer gelesen werden.
Die Bytes werden von vorne aus dem Empfangspuffer entnommen.
Dabei werden alle Bytes entnommen, bis das Byte 0 gelesen wird:
Bsp.: Der Empfangspuffer enthält die Bytes [60, 61, 87, 0, 70, 68, 0].
Der Befehl komm_s.empfangeBis(0)
gibt die Bytes [60, 61, 87] zurück.
Der Empfangspuffer enthält danach die Bytes [70, 68, 0].
Das Byte 0 wird aus dem Empfangspuffer entfernt, aber nicht zurückgegeben.
Aufgabe 3
-
Der Befehl
komm_s.empfangeBis(0)
wird aufgerufen. Gib an:- den Inhalt des Empfangspuffers an, nachdem die Funktion aufgerufen wurde.
- die Bytes, die von dem Befehl zurückgegeben werden.
-
Wie oft muss der Befehl
komm_s.empfangeBis(0)
aufgerufen werden, um alle Bytes aus dem Empfangspuffer zu lesen? Begründe!
Falls sich das Byte 0 nicht im Empfangspuffer befindet, wartet der Befehl komm_s.empfangeBis(0)
solange, bis sich das Byte 0 im Empfangspuffer befindet.
Zeichenketten übertragen
Wenn eine Zeichenkette übertragen werden soll, muss der Sender die Zeichen zunächst in Bytes umwandeln. Dazu verwenden wir den ASCII-Code. Der Empfänger muss die Bytes wieder in Zeichen umwandeln.
Aufgbe 4
- Wandele die Zeichenkette "Hi" in eine Folge aus Bytes um. Verwende dazu die ASCII-Tabelle.
-
Wandele die Zeichenkette "Hi" in eine Folge aus Bytes um. Verwende dazu den Python-Befehl
ord()
.>>> ord('H')
- Wandele die Bytefolge in eine Zeichenkette um. Verwende dazu die ASCII-Tabelle.
-
Wandele die Bytefolge in eine Zeichenkette um. Verwende dazu den Python-Befehl
chr()
.>>> chr(79)
Mit dem Befehl komm_s.sendeStr('Hi')
kann eine Zeichenkette gesendet werden.
Dieser Befehl wandelt die Zeichenkette zunächst mit Hilfe der ASCII-Tabelle in Bytes um und sendet diese Bytes.
Mit dem Befehl komm_s.empfangeStrBis(0)
kann eine Zeichenkette empfangen werden.
Dieser Befehl entnimmt alle Bytes aus dem Empfangspuffer, bis das Byte 0 erscheint.
Danach wandelt der Befehl die entnommenen Bytes mit Hilfe der ASCII-Tabelle in eine Zeichenkette um und gibt die Zeichenkette zurück.