Leeren Binärstring abfragen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
maksimilian
User
Beiträge: 86
Registriert: Freitag 2. November 2018, 20:59

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
Benutzeravatar
__blackjack__
User
Beiträge: 14028
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@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.
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.
Sirius3
User
Beiträge: 18264
Registriert: Sonntag 21. Oktober 2012, 17:20

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?
maksimilian
User
Beiträge: 86
Registriert: Freitag 2. November 2018, 20:59

Oh Mann, das ist es natürlich:

Code: Alles auswählen

if komm.recv(2) == b"":
Danke!
Benutzeravatar
__blackjack__
User
Beiträge: 14028
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

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?
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.
Antworten