Übermittlung zusätzlicher ASCII-Zeichen bei Übertragung von Dateiinhalt mit Xmodem - JAVA

  • Themenstarter Themenstarter Gelöschtes Mitglied 65862
  • Beginndatum Beginndatum
G

Gelöschtes Mitglied 65862

Gast
Guten Abend alle Zusammen,

aktuell arbeite ich an einem Projekt, in dem ich einen Dateiinhalt (.txt-Dokument), mittels Xmodem, an einen COM-Port senden möchte (und natürlich an die damit verbundene Hardware).

Soweit so gut.
Nun ist mir allerdings aufgefallen, dass zu Beginn und am Ende des übertragenen Dateiinhalts zusätzliche ASCII-Zeichen übertragen werden, die ich in diesem Fall natürlich gar nicht da stehen haben darf und will.

Erste Zeile der Textdatei: þ! <-- Hier sollte eigentlich nur das Ausrufezeichen enthalten sein (vor dem Ausrufezeichen steht noch ein ä3/4)
Letzte Zeile der Textdatei: enQ <-- Hier sollte eigentlich ein "end" stehen

[CODE lang="java" title="Übermittelte ASCII-Zeichen"]// In order to 4278 Data is transmitted in the form of byte blocks
private final int SECTOR_SIZE = 4278; //4278[/CODE]

Die Anzahl der übertragenen Zeichen habe ich im Skript soweit angepasst, daran sollte es also eigentlich nicht liegen. Natürlich kann ich mich in diesem Fall auch irren, da ich noch relativ unerfahren im Bereich Xmodem bin.

Aus diesem Grund würde ich gerne hier mein Glück versuchen und fragen, ob jemand zufälligerweise Tipps für mich hat, wie ich das Problem beheben kann.

Mit freundlichen Grüßen
JuKo
 
Anmerkung: Noch nie von XMODEM gehoert, aber habe mal mit COM Ports gearbeitet. Wie sendest du die Daten denn? Hast du da eine Lib oder werden die einfach in eine Date geschrieben? Kommen die falschen Zeichen in der Hardware auch so an? Kann es sein dass der COM-Port falsch konfiguriert ist und Steuerzeichen mitsendet?
 
Anmerkung: Noch nie von XMODEM gehoert, aber habe mal mit COM Ports gearbeitet. Wie sendest du die Daten denn? Hast du da eine Lib oder werden die einfach in eine Date geschrieben? Kommen die falschen Zeichen in der Hardware auch so an? Kann es sein dass der COM-Port falsch konfiguriert ist und Steuerzeichen mitsendet?
Ich lasse die Textdatei auslesen und dann über einen OutputStream an den COM-Port senden.

Leider steht mir die Hardware noch nicht zur Verfügung, deswegen kann ich die Frage nicht beantworten.
Ersatzweise nutze ich ein Programm, welches den COM-Port überwacht und alle eingehenden und ausgehenden Datenströme aufzeichnet und in einer Textdatei ausgibt. Dort tauchen dann die zusätzlichen ASCII-Zeichen auf.

Ich denke nicht, dass der Fehler am COM-Port liegt. Sende ich einzelne Strings an den Port, werden keine zusätzlichen Zeichen ausgegeben.
 
Eventuell hast du hier ein Problem mit Enkodierung vom Text. Strings in Java sind UTF-16, wenn eine Datei gelesen wird ist es, glaube ich, Plattform-default (also UNIX UTF-8 und Windows CP-1252...leider), ebenso beim schreiben. Also es kann sein dass du einfach nur beim lesen und schreiben explizit die Enkoeriung angeben musst.

Ich habe leider schon wirklich lange nicht mehr mit COM-Ports gearbeitet, lass dir am besten mal den String direkt vor dem Schreiben an dem COM-Port ausgeben um zu testen ob vielleicht in dem Zustand schon die zusaetzlichen Zeichen enthalten sind, oder ob sie erst beim schreiben in den Port hinzukommen.
 
@Robert Zenz XMODEM ist ein Übertragungsprotokoll. Wurde z. T. bei BBS (aka Mailbox-System) zur Dateiübertragung genommen (wobei später eher ZMODEM verbreitet war) 🙂

dass zu Beginn und am Ende des übertragenen Dateiinhalts zusätzliche ASCII-Zeichen übertragen werden, die ich in diesem Fall natürlich gar nicht da stehen haben darf und will.
Das dürften Teile des Protokolls sein, die übertragen werden müssen.

XMODEM versendet Blöcke, die wie folgt aussehen (vgl. http://pauillac.inria.fr/~doligez/zmodem/ymodem.txt, S. 20 ff.):
Code:
<SOH><BlockNr><255-BlockNr><Daten><Prüfsumme>
Dabei ist SOH ein Byte mit dem Wert 1. Die BlockNr ist ebenfalls ein Byte lang und wird stetig inkrementiert (Überlauf von 255 auf 0). Daten sind 128 Bytes und die Prüfsumme ist ein Byte, wobei die Daten aufsummiert werden (auch dieses Byte läuft dann von 255 auf 0 über).
 
Klingt besser was @mihe7 sagt, es ist gut moeglich dass dein Programm welches den COM Port "ueberwacht" das Protokoll nicht beruecksichtigt und deswegen dir falsche Werte anzeigt.

@mihe7 Ich hab' nur den Wiki-Artikel ueberflogen. 🙂
 
Alles klar, ich werde mir das morgen auf jeden Fall nochmal anschauen und dann Rückmeldung geben.

Vielen Dank für die Hilfe soweit.
 
@Robert Zenz XMODEM ist ein Übertragungsprotokoll. Wurde z. T. bei BBS (aka Mailbox-System) zur Dateiübertragung genommen (wobei später eher ZMODEM verbreitet war) 🙂


Das dürften Teile des Protokolls sein, die übertragen werden müssen.

XMODEM versendet Blöcke, die wie folgt aussehen (vgl. http://pauillac.inria.fr/~doligez/zmodem/ymodem.txt, S. 20 ff.):
Code:
<SOH><BlockNr><255-BlockNr><Daten><Prüfsumme>
Dabei ist SOH ein Byte mit dem Wert 1. Die BlockNr ist ebenfalls ein Byte lang und wird stetig inkrementiert (Überlauf von 255 auf 0). Daten sind 128 Bytes und die Prüfsumme ist ein Byte, wobei die Daten aufsummiert werden (auch dieses Byte läuft dann von 255 auf 0 über).

@Robert Zenz XMODEM ist ein Übertragungsprotokoll. Wurde z. T. bei BBS (aka Mailbox-System) zur Dateiübertragung genommen (wobei später eher ZMODEM verbreitet war) 🙂


Das dürften Teile des Protokolls sein, die übertragen werden müssen.

XMODEM versendet Blöcke, die wie folgt aussehen (vgl. http://pauillac.inria.fr/~doligez/zmodem/ymodem.txt, S. 20 ff.):
Code:
<SOH><BlockNr><255-BlockNr><Daten><Prüfsumme>
Dabei ist SOH ein Byte mit dem Wert 1. Die BlockNr ist ebenfalls ein Byte lang und wird stetig inkrementiert (Überlauf von 255 auf 0). Daten sind 128 Bytes und die Prüfsumme ist ein Byte, wobei die Daten aufsummiert werden (auch dieses Byte läuft dann von 255 auf 0 über).
Ok, das ist möglich. Nur wundert es mich dann in diesem Fall, dass mein letzter String in der Datei "end" nicht ausgeschrieben wird, sondern in ein "enQ" umgewandelt wird.
Eigentlich müsste aus diesem dann ja ein endQ werden oder hab ich da jetzt was falsch verstanden?
 
Ok, das ist möglich. Nur wundert es mich dann in diesem Fall, dass mein letzter String in der Datei "end" nicht ausgeschrieben wird, sondern in ein "enQ" umgewandelt wird.
Eigentlich müsste aus diesem dann ja ein endQ werden oder hab ich da jetzt was falsch verstanden?
Eventuell verwendet das Programm die falsche Laenge wegen dem fuehrenden Steuerzeichen oder aehnlich. Die Nachricht ist ja quasi genau um ein Byte/CodePoint verschoben.
 

Neue Themen


Zurück
Oben