Was sind Sockets in Python und wie funktionieren sie?
Ein Socket ist eine Programmierschnittstelle, die eine bidirektionale Kommunikation zwischen zwei Knoten in einem Computernetzwerk ermöglicht. Es handelt sich um eine virtuelle Verbindung, über die Anwendungen Daten senden und empfangen können.
Moderne Netzwerkanwendungen nutzen Python Sockets für verschiedenste Systeme – von Messengern über Online-Spiele bis hin zu Datenaustauschdiensten. Überall kommt die Netzwerkkommunikation via Sockets zum Einsatz.
Grundbegriffe der Netzwerkprogrammierung
Um mit Sockets in Python zu arbeiten, solltest du diese Schlüsselkonzepte verstehen:
- IP-Adresse – eindeutige Adresse eines Geräts im Netzwerk
- Port – numerische Kennung eines Dienstes auf einem Gerät
- TCP (Transmission Control Protocol) – zuverlässiges Datenübertragungsprotokoll
- UDP (User Datagram Protocol) – schnelles Protokoll ohne Zustellgarantie
TCP gewährleistet eine garantierte Datenzustellung mit Fehlerkontrolle. UDP ist schneller, bietet aber keine Garantie, dass Nachrichten ankommen.
Einrichtung und Import des socket-Moduls
Das socket-Modul ist Teil der Python-Standardbibliothek. Um mit Sockets zu arbeiten, genügt ein einfacher Import:
import socket
Es sind keine zusätzlichen Installationen erforderlich. Die socket-Bibliothek ist in allen Python-Versionen standardmäßig verfügbar.
Einen TCP-Server in Python erstellen
Basisimplementierung eines Servers
Ein TCP-Server nimmt Verbindungen von Clients entgegen und verarbeitet deren Anfragen. Hier eine einfache Umsetzung:
import socket
# TCP-Socket erstellen
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# An Adresse und Port binden
server_socket.bind(('localhost', 12345))
# Auf eingehende Verbindungen warten (max. 5 in der Warteschlange)
server_socket.listen(5)
print("Server gestartet. Warte auf Verbindungen...")
while True:
# Verbindung annehmen
client_socket, address = server_socket.accept()
print(f"Verbindung von {address}")
# Nachricht empfangen
message = client_socket.recv(1024).decode('utf-8')
print(f"Nachricht erhalten: {message}")
# Antwort senden
client_socket.send("Hallo vom Server!".encode('utf-8'))
# Verbindung zum Client schließen
client_socket.close()
Ablauf des Serverprozesses verstehen
Im obigen Code passieren folgende Schritte:
- Ein Socket wird mit dem TCP-Protokoll erstellt
- Der Server bindet sich an die Adresse localhost und Port 12345
- Der Server wartet auf eingehende Client-Verbindungen
- Bei einer Verbindung wird die Nachricht des Clients entgegengenommen
- Der Server sendet eine Antwort und schließt die Verbindung
Die Methode socket.AF_INET steht für IPv4, während socket.SOCK_STREAM das TCP-Protokoll definiert.
Entwicklung eines TCP-Clients
Ein TCP-Client verbindet sich mit dem Server und tauscht Daten aus. Beispielimplementierung:
import socket
# Client-Socket erstellen
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# Mit Server verbinden
client_socket.connect(('localhost', 12345))
# Nachricht senden
client_socket.send("Hallo, Server!".encode('utf-8'))
# Antwort empfangen
response = client_socket.recv(1024).decode('utf-8')
print(f"Antwort vom Server: {response}")
# Verbindung schließen
client_socket.close()
Der Client führt eine Abfolge von Aktionen aus: Verbinden, Daten senden, Antwort empfangen und Verbindung schließen.
Arbeiten mit dem UDP-Protokoll
UDP bietet eine schnellere Datenübertragung ohne Zustellgarantie. Dadurch eignet es sich besonders für Echtzeitanwendungen.
UDP-Server
Blogs
Bereitstellung von JavaScript (Node.js) auf Kubernetes: Schritt-für-Schritt-Anleitung
Top-Fehler von JavaScript-Anfängern: Fortgeschrittenes Niveau
Hexagonale Architektur in Java: saubere Logik ohne Schmerz
Buchempfehlungen
Lesen Sie auch
Kotlin von Null zum Profi: YouTube-Kanäle und Kurse, die einen Blick wert sind
API in TypeScript: REST, GraphQL und gRPC – was wählt man 2025?
Funktionale Programmierung in Swift: Fortgeschrittenes Niveau
Sortierung von Strukturen in Go: Der kurze Weg und die Magie unter der Haube
Java in der Welt der Chips: Warum Embedded-Entwicklung der neue Hardcore ist