Verlorene Bytes mit newIO

Status
Nicht offen für weitere Antworten.

habnefrage

Mitglied
Hi Männer,

ich habe ein Problem mit meiner Netzwerkkommunikation. Server und client sind beide von mir gebaut und machen, bis auf wenige Ausnahmen, genau das was sie sollen.

1. Client verbindet sich mit Server
2. Kurzes Handshake
3. Client schickt unentwegt (ohne auf irgend eine Response zu warten) Daten an den Server

Der Client ist ein von mir gebastelter Lasttest, der auch jede menge Last erzeugt. Die einzelnen Datenpakete sind immer 67 Bytes lang (Aber davon tausende). Nach 1 bis zwei Minuten (manchmal (sehr selten) auch schon nach wenigen Sekunden) kommt es auf dem Server zu dem Problem, dass bytes fehlen. Wie viele weiß ich nicht genau, da ich die Datenpakete nicht nummeriert habe. ich sehe nur dass eines in der Mitte aufhört und dann das nächste (oder irgend ein nächstes) weiter geht.


Ich habe das ganze auf der Serverseite mit tcpdump mitgeschnitten. Da tauchen SEEEEHR oft Meldungen auf dass die Window Size full wäre und es werden auch seeeehr oft Zero Windows geschickt.

Hat irgend jemand eine Idee wo ich weiter suchen kann? Der TCP Stack lässt einfach nichts fallen, das muss ein Problem an meiner Anwendung oder von mir aus auch an der Java Version sein, ich komme aber nicht weiter.

mfg
 

DocRandom

Top Contributor
..mist, Frauen dürfen nicht antworten!

Hat irgend jemand eine Idee wo ich weiter suchen kann? Der TCP Stack lässt einfach nichts fallen, das muss ein Problem an meiner Anwendung oder von mir aus auch an der Java Version sein, ich komme aber nicht weiter.

..muß mir eine neue Glaskugel zulegen, trotz stundenlanger Konzentration hab ich nix gefunden
Evtl. hilft die neue Plasmakugel vom Mediamarkt, die soll sogar Sourcecode sichtbar machen!

lg
 

habnefrage

Mitglied
Die Frage geht eher in Richtung TCP-Stack und Implementierungen in Java. Was kann dazu führen, dass Daten direkt nach einem Channel.read(myByteBuffer) nicht drin stehen? Bzw. nur die Hälfte drin steht.
 
Zuletzt bearbeitet:

HoaX

Top Contributor
Veilleicht ist das Array nicht ganz gefüllt, weil noch nicht mehr Daten angekommen sind?
Zeig doch mal den Code von Sender und Empfänger! Hast du es mal mit einem fremden Client oder Server versucht? Mir würde da als Server z.B. netcat unter Linux einfallen.
 

habnefrage

Mitglied
Das war ein super tip, danke.
Der Sender hat nicht alles gesendet weil ei Netcat auch nicht alles ankam.

Habe den Fehler auch gleich gefunden: Habe channel.write(myBuffer) aufgerufen ohne dabei zu prüfen ob auch tatsächlich alle Bytes gesendet wurden.

Vielen Dank...
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen


Oben