Seite 1 von 1

Leeren Binärstring abfragen

Verfasst: Mittwoch 7. Juli 2021, 18:30
von maksimilian
Hallo Ihr,
ich möchte in einem TCP-Server beim Empfang der Daten vom Client einen Leerstring abfangen. Zunächst werden die ersten beiden Bytes der Nachricht gelesen, welche die Länge der folgenden Nachricht enthalten. Wenn eine Leernachricht vom Client kommt (das ist bei mir ein Fehlerfall), sieht das im Trace so aus:

Code: Alles auswählen

komm.recv(2):b''
 
Wie kann ich den binären Leerstring in Python abfragen ? Mit

Code: Alles auswählen

if komm.recv(2) == "":
geht's nicht.

maksimilian

Re: Leeren Binärstring abfragen

Verfasst: Mittwoch 7. Juli 2021, 18:49
von __blackjack__
@maksimilian: Die 2 sieht komisch bis falsch aus. Ansonsten ist ein leeres `bytes`-Objekt niemals gleich einer leeren Zeichenkette. Aber leere `bytes`-Objekte sind wie alle leeren Sequenzen ”unwahr” in einem boole'schen Kontext:

Code: Alles auswählen

if not komm.recv(1):
    ...
Und falls da ein Byte empfangen wird, wird das natürlich auf diese Weise verworfen.

Re: Leeren Binärstring abfragen

Verfasst: Mittwoch 7. Juli 2021, 18:50
von Sirius3
Einen Leeren Bytestring bekommst Du nur, wenn Du einen timeout definiert hast oder die Verbindung abgebrochen ist. In welchem Fall bekommst Du denn einen Leerstring und was willst Du dann machen? Das

Code: Alles auswählen

if komm.recv(2) == b"":
oder einfacher

Code: Alles auswählen

if not komm.recv(2):
sieht nicht sehr sinnvoll aus.
Wie sieht denn der Code aus und die komplette Fehlermeldung?

Re: Leeren Binärstring abfragen

Verfasst: Donnerstag 8. Juli 2021, 18:41
von maksimilian
Oh Mann, das ist es natürlich:

Code: Alles auswählen

if komm.recv(2) == b"":
Danke!

Re: Leeren Binärstring abfragen

Verfasst: Donnerstag 8. Juli 2021, 22:20
von __blackjack__
Das ist ziemlich wahrscheinlich falsch, oder warum ist es danach egal ob 1 oder 2 Bytes gelesen wurden wenn da *nicht* die leeren `bytes` raus kommen?