lager:lok_netze:tcp_python
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
lager:lok_netze:tcp_python [26.09.2019 17:48] – [Programmierung Übung zu TCP mit python] richard | lager:lok_netze:tcp_python [04.02.2025 12:09] (aktuell) – Externe Bearbeitung 127.0.0.1 | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | ~~DISCUSSION|Ergänzungen~~ | + | ~~DISCUSSION:closed|Ergänzungen~~ |
====== Programmierung Übung zu TCP mit python ====== | ====== Programmierung Übung zu TCP mit python ====== | ||
Zeile 7: | Zeile 7: | ||
- Programmieren Sie eine einfache Client-Client-Anwendung bei der sich die jeweiligen Clients Nachricht per TCP zusenden. | - Programmieren Sie eine einfache Client-Client-Anwendung bei der sich die jeweiligen Clients Nachricht per TCP zusenden. | ||
- | - Erweitern Sie die Nachrichten um Farben (rot, grün, blau), die zu Beginn des Textes mit einfachen Zeichen vom User ausgewählt werden sollen und auf der Empfangsseite farbig ausgegeben werden. | + | - Erweitern Sie den Server zu einem Multi-Connection-Server, der mehr als eine Verbindung bedienen kann. |
+ | - Geben Sie eingehende Nachrichten an alle anderen Verbindungen aus. | ||
- | < | ||
- | * für blau | ||
- | - für rot | ||
- | + für grün | ||
- | </ | ||
===== Hinweise / Tipps ===== | ===== Hinweise / Tipps ===== | ||
Zeile 21: | Zeile 17: | ||
Der Code wird [[https:// | Der Code wird [[https:// | ||
- | ==== ECHO-Server ==== | + | ===== ECHO-Server |
Der Server binden sich auf den Socket '' | Der Server binden sich auf den Socket '' | ||
Die empfanenen Daten sendet er an den Client per '' | Die empfanenen Daten sendet er an den Client per '' | ||
Zeile 48: | Zeile 44: | ||
</ | </ | ||
- | ==== ECHO-Client ==== | + | ===== ECHO-Client |
Der Client schickt genau eine Nachricht an den Server und gibt per '' | Der Client schickt genau eine Nachricht an den Server und gibt per '' | ||
Zeile 68: | Zeile 64: | ||
</ | </ | ||
+ | ==== Interaktiver Echo-Client ==== | ||
- | ====== Multi-Connection-Server | + | <file python echo_client_interactive.py> |
+ | # | ||
+ | |||
+ | import socket | ||
+ | |||
+ | HOST = ' | ||
+ | # PORT = 65432 # Port des Servers eintragen | ||
+ | PORT = 50000 | ||
+ | |||
+ | host = input(' | ||
+ | port = input(' | ||
+ | |||
+ | if host != '': | ||
+ | HOST = host | ||
+ | if port != '': | ||
+ | PORT = int(port, 10) | ||
+ | |||
+ | with socket.socket(socket.AF_INET, | ||
+ | s.connect((HOST, | ||
+ | written = '' | ||
+ | while True: | ||
+ | written = input(' | ||
+ | if written == ' | ||
+ | break; | ||
+ | s.sendall(bytearray(written, | ||
+ | data = s.recv(1024) | ||
+ | print(' | ||
+ | |||
+ | print(' | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | ===== Multi-Connection-Server ===== | ||
Quelle: Das Beispiel stammt ursprünglich von dieser [[https:// | Quelle: Das Beispiel stammt ursprünglich von dieser [[https:// | ||
Zeile 80: | Zeile 110: | ||
<file python tcp_multi_server.py> | <file python tcp_multi_server.py> | ||
+ | # | ||
+ | |||
import select, socket, sys, queue | import select, socket, sys, queue | ||
server = socket.socket(socket.AF_INET, | server = socket.socket(socket.AF_INET, | ||
Zeile 126: | Zeile 158: | ||
del message_queues[s] | del message_queues[s] | ||
</ | </ | ||
+ | |||
+ | ===== Keystroke als Command Line Handler ===== | ||
+ | |||
+ | ACHTUNG: Das folgende Beispiel funktioniert nur, wenn das Script direkt in der Shell ausgeführt wird. Hierzu muss zunächst die Datei ausführbar gemacht werden. Mit folgendem Befehl kann dies getan werden: | ||
+ | |||
+ | < | ||
+ | |||
+ | Das folgende Bespiel wartet dauerhaft auf eine Eingabe und führt je nach Tastedruck Programmcode aus. | ||
+ | <file python keystroke_sample.py> | ||
+ | # | ||
+ | |||
+ | import sys, termios, tty, os, time | ||
+ | |||
+ | def getch(): | ||
+ | fd = sys.stdin.fileno() | ||
+ | old_settings = termios.tcgetattr(fd) | ||
+ | try: | ||
+ | tty.setraw(sys.stdin.fileno()) | ||
+ | ch = sys.stdin.read(1) | ||
+ | |||
+ | finally: | ||
+ | termios.tcsetattr(fd, | ||
+ | return ch | ||
+ | |||
+ | while True: | ||
+ | char = getch() | ||
+ | |||
+ | if (char == " | ||
+ | print(" | ||
+ | exit(0) | ||
+ | |||
+ | if (char == " | ||
+ | print(" | ||
+ | time.sleep(1) | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
lager/lok_netze/tcp_python.1569520114.txt.gz · Zuletzt geändert: 04.02.2025 12:10 (Externe Bearbeitung)