[Python-de] Datenübertragung per UDP

Peter Otten __peter__ at web.de
Do Apr 23 15:43:17 CEST 2015


Stefan wrote:

> Hallo,
> 
> Wir senden mit einem Delphi-Programm von einem PC aus UDP-Pakete an ein
> Python Script auf einem Linux Server.
> 
> Dabei beobachten wir folgendes Phänomen:
> 
> Datenbytes < 128 werden korret übertragen. Datenbytes > 127 kommen auf
> der Empfangsseite als 0x3F, also Dezimal 63 an. Das betrifft nur die
> Datenbytes. Die IP-Adresse des Senders können wir korrekt auslesen.
> 
> Auf der Delphi-Seite sieht es so aus, dass alles bis zum Aufruf der
> UDP-Senderoutine ok ist.
> 
> Die Frage ist jetzt, wo liegt das Problem? Kann man per UDP
> grundsätzlich nur 7-Bit Worte senden oder liegt das Problem eventuell
> doch auf der Delphi Seite?
> 
> Ich kann hier keine Codeschnipsel zeigen, weil ich das Thema nicht
> selbst bearbeite und der Kollege, der das bearbeitet schon Feierabend
> hat. Aber vieleicht kann mir ja trotzdem jemand einen Tipp geben.


>>> chr(0x3f)
'?'

ist das ASCII-Fragezeichen, und das erscheint normalerweise beim Umwandeln 
von Unicode in Bytes

>>> u"Ähnlich üblich löblich".encode("ascii", "replace")
'?hnlich ?blich l?blich'

und somit auf der Sender-Seite. Eine missglückte Konversion von Bytes auf 
Empfängerseite äußert sich in der Regel als

>>> "Ähnlich üblich löblich".decode("ascii", "replace")
u'\ufffd\ufffdhnlich \ufffd\ufffdblich l\ufffd\ufffdblich'

wobei

>>> unicodedata.name(u"\ufffd")
'REPLACEMENT CHARACTER'





Mehr Informationen über die Mailingliste python-de