Protokollbedingte Timeouts programmieren

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Matjes
User
Beiträge: 2
Registriert: Donnerstag 17. Mai 2018, 12:53

Hallo zusammen,

ich möchte eine Client-Server-Verbindung programmieren bei der protokollbedingt mehrere Timeout eine Rolle spielen.
Beispielsweise soll die Kommunikation nach 30s geschlossen werden, wenn sich der Server nicht meldet. Das könnte ich mit socket.settimeout(xx) lösen.
Schwieriger wird es für mich, wenn 15s kein Datentelegramm gesendet wurde, dass der Client eine Quittung schickt. Oder es soll alle 20s die Verbindung geprüft werden, wenn keine anderen Telegramme gesendet werden. Kann ich diese Timeouts mit Threads lösen?
Bei dem Protokoll handelt es sich um das IEC60870-5-104 Protokoll.

Vielen Dank schon mal vorab.

Gruß
Matjes
__deets__
User
Beiträge: 14522
Registriert: Mittwoch 14. Oktober 2015, 14:29

Threads helfen denke ich nicht, denn in dem Moment stehst du ja in einem blockierenden recv() oder aehnlichem Aufruf - und der kommt dann trotzt threadnig nicht zurucek.

Der richtige Weg so etwas zu loesen ist mit Python 3.5 asyncio. Denn damit kannst du parallel auf mehrere Ereignisse warten, wobei Ereignisse heisst, dass Datenpakete angekommen sind, als auch timer ausgeloest haben. Zb hier https://docs.python.org/3/library/async ... ayed-calls

kann man das sehen. asyncio braucht ein bisschen Hirnschmalz, aber ist eigentlich ziemlich cool.
Matjes
User
Beiträge: 2
Registriert: Donnerstag 17. Mai 2018, 12:53

@ _deets_: Vielen Dank für die schnelle Antwort.
Ich werde mir die Libary ansehen.
Antworten