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: 13219
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.
“There will always be things we wish to say in our programs that in all known languages can only be said poorly.” — Alan J. Perlis
Sirius3
User
Beiträge: 17809
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: 13219
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?
“There will always be things we wish to say in our programs that in all known languages can only be said poorly.” — Alan J. Perlis
Antworten