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
Außerdem benutzt die Netzwerkmonitorprogramme nicht den TCP/IP Stack, sondern greift direkt auf RAW-Paketdaten.
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.
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
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?
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.