Forum: Mikrocontroller und Digitale Elektronik UDP und Java?


von Joern (Gast)


Lesenswert?

Moin,

ich habe eine Mikrocontroller-Anwendung gebaut, die Daten per Ethernet 
versendet. Als Protokoll habe ich dabei UDP implementiert. Nun 
funktioniert dies hinreichend gut, mit einem Netzwerkmonitor kann ich 
die Pakete empfangen und dieser zeigt auch an, dass sie richtig 
aufgebaut sind. Ein Java-Programm, dass ich zu ihrem Empfang 
programmiert habe, bekommt allerdings keine Daten.
Nun verwende ich das Checksum-Feld des UDP-Headers nicht, weil ich es 
moeglichst einfach halten wollte. Kann es damit zusammenhaengen? Oder 
sperrt eventuell die Firewall mich einfach aus, der Netzwerkmonitor kann 
die Daten aber dennoch erst einmal empfangen? (War schwierig 
rauszufinden, weil es ein Uni-Rechner war und ich nicht einfach die 
Firewall ausstellen konnte.)
Oder gibt es da Java-spezifische Probleme?

Danke und Gruss, Joern

von Anonymous (Gast)


Lesenswert?

Versuch mal die Prüfsumme auf 0 zu setzen.

von Anonymous (Gast)


Lesenswert?

Außerdem benutzt die Netzwerkmonitorprogramme nicht den TCP/IP Stack, 
sondern greift direkt auf RAW-Paketdaten.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Joern wrote:
> Oder gibt es da Java-spezifische Probleme?
>
Wieso sollte es "Java-spezifische Probleme" geben? Das Problem wird 
sein, das der Layer welcher für UDP zuständig ist ob der 
fehlenden/falschen Prüfsumme das Paket verwirft.
Wobei falsch noch gehen könnte aber weglassen halte ich für keine Gute 
Idee ;)
Du mußt auch sichergehen das der Port korrekt ist sowie die Zieladresse.

von Joern (Gast)


Lesenswert?

Danke erstmal! Eigentlich glaube ich, dass meine Pakete richtig sind. 
Ich hatte anfangs einige Probleme mit der Endianess und infolge falsche 
Pakete. Das hat auch mein Netzwerkmonitor angezeigt, der nun aber die 
Pakete fuer richtig haelt. Zum Thema Pruefsumme im UDP-Header habe ich 
folgendes bei wikipedia gefunden:

"In dem Prüfsummenfeld kann eine 16 Bit große Prüfsumme mitgesendet 
werden. Die Prüfsumme wird über den Header, den so genannten 
Pseudo-Header und die Daten gebildet. Die Prüfsumme ist optional, wird 
aber in der Praxis fast immer benutzt (falls nicht, wird diese auf "0" 
gesetzt)."

Nun wundere ich mich, ob Java das vielleicht strenger sieht oder ob 
einfach nur die Firewall meine Pakete abfaengt. Wuerden sie in letzterem 
Falle trotzdem vom Monitor angezeigt??
Und wie koennte ich die Firewall ueberreden, die Verbindung zuzulassen? 
Erstmal vom Computer aus Pakete schicken anstatt einfach auf welche zu 
warten?

Gruss, Joern

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Zeig mal den Code für den UDP Empfang, wenn die Firewall blockt siehst 
du auch auf dem Monitor nix!
Hast du schonmal versuch von Java zu Java was zu senden?

von Hannes J. (Firma: _⌨_) (pnuebergang)


Lesenswert?

Java macht da gar nichts besonderes. Java verlässt sich auf den IP-Stack 
des Betriebssystems. Wenn nichts ankommt, kommt entweder schon gar 
nichts bei dem Rechner an, oder der IP-Stack im Betriebssystem schmeißt 
das Paket weg weil er es nicht mag.

von Ekschperde (Gast)


Lesenswert?

Fehlerhafte Prüfsummen beim UDP-Protokoll werden AFAIK vom IP-Stack
des OS ignoriert, d.h. die Applikation muss sich da selber kümmern.
Das Paket sollte also ankommen, egal ob UDP-Prüfsumme ok oder nicht.

von Ekschperde (Gast)


Lesenswert?

P.S.:
Lausche doch mal mit netcat auf dem UDP-Port.
Das benutzt dafür den IP-Stack des OS.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.