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. Gruß Stefan
Dann warten wir eben bis morgen, wenn Du uns entsprechenden Code lieferst. Und nein, die UDP Payload ist nicht limitiert auf 7 Bit. -aj
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'
Hello Stefan, Stefan wrote:
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.
schaue mal mit Wireshark o.ä. nach was auf dem Netzwerk durch die Gegend geschickt wird.
Auf der Delphi-Seite sieht es so aus, dass alles bis zum Aufruf der UDP-Senderoutine ok ist.
Wie hast du das nachgeprüft? Bytes > 127 haben keine universelle Bedeutung.
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.
Mehr nachschauen, weniger raten. Bastian
Am 24.04.2015 um 10:36 schrieb Bastian Blank:
Hello Stefan,
Stefan wrote:
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.
schaue mal mit Wireshark o.ä. nach was auf dem Netzwerk durch die Gegend geschickt wird.
Auf der Delphi-Seite sieht es so aus, dass alles bis zum Aufruf der UDP-Senderoutine ok ist.
Wie hast du das nachgeprüft? Bytes > 127 haben keine universelle Bedeutung.
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.
Mehr nachschauen, weniger raten.
Bastian
Inzwischen hat sich herausgestellt, dass das Problem auf der Delphi-Seite lag. Die verwendete Bibliotheksfunktion aus den Indy-Komponenten war Schuld. Danke noch mal an alle Mitleser. Gruß Stefan
participants (4)
-
Andreas Jung
-
Bastian Blank
-
Peter Otten
-
Stefan