Qgelm

Beispiel für TCP Kommunikation

Warum TCP?

- HTTP baut darauf auf
- wichtig für verbindungsorientierte Kommunikation (Wechselsprechen, wie Telefon…)

Und UDP?

- verbindungslose Kommunikation
- wie Versenden von Postkarten, wartet nicht auf Rückantwort…
- auch wichtig aber nicht jetzt

Die üblichen Betriebssysteme übernehmen heutzutage die Verarbeitung der ein- und ausgehenden Netzwerkdaten bis zur TCP-Ebene. Eine Software, die so einen TCP-Port nutzen möchte, muss eine vom Betriebssystem bereitgestellte interne Programmierschnittstelle verwenden, die sogenannten Sockets.

Beispiel für Client und Server in der Programmiersprache Python:

Der Server schnappt sich einen TCP Port und wartet darauf, dass ein Client ihm etwas sendet. Dazu muss der Client die IP-Adresse und die Port Nummer wissen.

Zuerst der Python Code des Servers:

import socket
 
PORT = 65432        # Port zum Lauschen 
 
# wir erklären hier, was wir benutzen wollen:
#   1) Das Internet Protokoll (also IP)
#   2) TCP (das erkennt man an dem SOCK_STREAM)
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
 
    s.bind(('0.0.0.0', PORT))    # das ist eine Schreibweise für 'alle Netzwerkschnittstellen'
    s.listen()
    conn, addr = s.accept()
    with conn:
        print('Verbindung von (IP, Port)', addr)
        while True:
            data = conn.recv(1024)
            if not data:
                break
            print('empfangen: ', data.decode("utf-8") )
            conn.sendall(b'Hallo Client!')

Das kann jetzt ausgeführt werden: Mit Rechtsklick in neuem Fenster: Konsole

cd Schulung; python3 tcp_server.py

Und hier der Code des Clients:

import socket
 
HOST = '195.201.41.116'  # Auf diesem Rechner läuft die gewünschte Anwendung
PORT = 65432        # Dies Port Nummer muss zur Server Anwendung passen
 
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.connect((HOST, PORT))
    s.sendall(b'Hallo Server!')
    data = s.recv(1024)
 
print('empfangen: ', data.decode("utf-8") )

Das kann jetzt ebenfalls ausgeführt werden: Entweder mit Rechtsklick in neuem Fenster: Konsole

oder: Im existierenden Fenster zwei Shells mittels screen eröffnen (ist übersichtlicher):

cd Schulung; screen
Ctrl-A |
Ctrl-A TAB
Ctrl-A C  # das erzeugt eine neue Shell im rechten Teil des Terminals

cd Schulung; python3 tcp_client.py

Und das Ganze läuft dann so ab:

Merke:

TCP ist verbindungsorientiert, d.h. nachdem der Client eine Verbindung aufgebaut hat, können Server und Client bidirektional miteinander kommunizieren. Einen kompletten Kommunikationsverlauf von Beginn durch den Client bis zum Abbau des Kommunikationskanals nennt man eine Session.

Jetzt kann es zu der nächsten, oberen Protokollschicht gehen: HTTP

Cookies helfen bei der Bereitstellung von Inhalten. Diese Website verwendet Cookies. Mit der Nutzung der Website erklären Sie sich damit einverstanden, dass Cookies auf Ihrem Computer gespeichert werden. Außerdem bestätigen Sie, dass Sie unsere Datenschutzerklärung gelesen und verstanden haben. Wenn Sie nicht einverstanden sind, verlassen Sie die Website.Weitere Information