Fachkonzept - Client in Python
Verbindungsaufbau und Port-Nummern
Daten, die über ein Netzwerk verschickt werden, müssen bei dem richtigen Computer ankommen. Deshalb besitzt jeder Computer (mindestens) eine IP-Adresse.
Wenn ein Computerprogramm gestartet wird, wird ein Prozess erzeugt. Zu einem Programm kann es also mehrere Prozesse geben - nämlich dann, wenn das Programm mehrmals gestartet wurde. Außerdem können Prozesse zu verschiedenen Programmen existieren. In der folgenden Abbildung kommt gerade ein Datenpaket über das Netzwerk an. Woher weiß der Computer, an welchen Prozess diese Daten weitergeleitet werden müssen? Dazu besitzt jeder Socket eine Port-Nummer:
Baut ein Client eine Verbindung zu einem Server auf, muss also die IP-Adresse und die Port-Nummer des Server angegeben werden:
>>> # Modul socket importieren
>>> import socket
>>> # Kommunikationssocket erzeugen
>>> komm_s = socket.socket()
>>> # IP-Adresse und Port-Nummer des Servers
>>> adresse = ('192.168.0.1', 5000)
>>> komm_s.connect(adresse)
Der Socket komm_s
des Clients besitzt ebenfalls eine Port-Nummer. Diese wird vom Betriebssystem des Clients automatisch gewählt.
Daten senden und empfangen
Wir verwenden die folgenden Funktionen aus der Datei socketLib.py. Diese Funktionen erhalten als Parameter ein Socket-Objekt. Sie können also erst nach dem Verbindunsaufbau verwendet werden.
# Verbindung aufbauen
import socket
komm_s = socket.socket()
adresse = ('127.0.0.1', 5001)
komm_s.connect(adresse)
# Sende eine Nachricht an den Server:
sendeStr('Hallo, ')
sendeStr('Wie gehts?')
# Dem Server mitteilen, dass wir keine weiteren Daten mehr senden.
sendeTrennByte(komm_s)
# Der Server bemerkt, dass wir keine weiteren Daten mehr senden und sendet eine Antwort.
# Antwort des Servers empfangen
antwort = empfangeStr(komm_s)
print(antwort)
# Verbindung zum Server beenden
komm_s.close()
-
empfangeStr(komm_s)
- Liest Daten, bis der Sender anzeigt, dass er keine weiteren Daten schicken wird.
- Parameter
komm_s
: Socket, von dem gelesen werden soll - Rückgabewert: gelesene Daten als String
-
sendeStr(komm_s, datenStr)
- Sendet den String datenStr über den Kommunikationssocket komm_s
- Parameter
komm_s
: Socket, über den gesendet werden soll - Parameter
datenStr
: String, der versendet werden soll
-
sendeTrennByte(komm_s)
- Benachrichtigt den Empfänger darüber, dass der Sender im Moment keine weiteren Daten sendet.
- Parameter
komm_s
: Socket, über den gesendet werden soll