Outputstream: Warten, bis daten gesendet sind: WIE?

Andreas_0815

Mitglied
Hallo zusammen,

ich schreibe eine kleine Server-Client Chat-Anwendung. Mit meinem Programm kann man auch Dateien versenden ( funktioniert auch ohne Probleme).
Nun scheibe ich beim Sender die Daten in einen OutputStream und hole sie beim Empfänger wieder raus.
Beim Sender schreibt meine App aber die Daten einfach direkt in den Stream und zwar schneller, als sie gesendet werden. Ich möchte aber die Übertragungsgeschwindigkeit berechnen. Dazu muss ich ja aber nun wissen, wie viele Bytes wirklich schon in welcher Zeit gesendet wurden. Wie kann ich also nun beim Sender Daten in den InputStream schreiben und warten, bis diese gesendet sind?

Schon mal vielen Dank!
Andreas
 
hi,

du kannst bei einem outputstream erzwingen das die daten geschrieben werden
Code:
out.flush()
, es ist normal das die daten nicht gleich gesendet werden, würden die daten immer gleich gesendet werden würden sich die nutzdaten in den paketen veringern und du hättest eine höhere traffic, würde dir vorschlagen den stream immer zu flushen sobald die nachricht geschreiben wurde...mit zeitmessung/datendurchsatz wird bissl komplizierter, aber brauch man das bei einem chat zudem die versendeten daten zu gering sind um einen effektiven wert zu ermitteln...

hmf
 
Beim normalen Chat-Text will ich ja auch keine "Durchsatz-Rate" errechnen! Nur beim Senden von Dateien (Bilder...).
Danke für die Idee. Aber ich nutzte out.flush() bereits.
Das sorgt aber nur dafür, dass er dann die Daten zum senden "freigibt". Ich brauche aber eine Möglichkeit um zu erfassen, wie viele Bytes wirklich gesendet worden sind, um die Transfer-Rate zu errechnen.
Hat dazu jemand ne Idee?

MfG
Andreas
 
hmmm jaein...
Die sagen da, dass es eigentlich nicht möglich ist. Ich muss wohl vom Empfänger eine Message zurücksenden, die angibt, ob wie schnell die Daten gesendet werden...
Oder gibts doch ne Möglichkeit?

thx
Andreas
 
gibt auf jeden noch ne "schmutzige" lösung...das jeweilige os stellt diese werte in irgendeiner form zur verfügung...windows zB. in der registry...kann bzw. wird warscheinlich aber nur die gesamt traffic sein....

wenn du den client ne nachricht zurück schicken lässt hast du ein verfälschtes und sommit unbrauchbares ergebniss...du kannst nur die anzahl der bytes die du in den out schreibst duch die zeit nehemen...wäre aber auch nicht sinnvoll...

tja...np, sry
 
Danke für die Idee... Aber die Registry lass ich mal lieber... will ja plattformunabhängig bleiben!!
Ich kann ja aber beim Empfänger die Daten-Rate berechnen (KB/s) und das dann parallel zum empfangen der Daten (der zu empfangenden Datei) an den Sender zurückschicken. Das dürfte meine "Empfang"-Rate doch nicht reduzieren, oder? Denn Upload und download sind doch was anderes? Oder beeinflusst sich das gegenseitig?

MfG
Andreas
 
teils,teils, wenn du es hinbekommst das sich beide nur noch hinundherschicken das sie grad xbytes in ysek empf haben dann ist dein prog nur beschäftig sich traffic auswertungen hin und her zu schicken...du kannst aber auch für jedes system eine implementation schreiben die dir die traffic auswertet...somit wärst du wieder unabhängig, bzw frag google obs schon libs für ähnliches gibt..die kannst du einbinden...

hmf
 
Da mich ja aber nur der Traffic-Speed von Datei-Sender nach Datei-Empfänger interessiert, werde ich ja nur von Empfänger die Transfer-Geschwindigkeit zurücksenden.
Die Möglichkeit schwirrte mir eigentlich auch schon lange im Kopf herum... nur dachte ich, dass es ja vielleicht eine bessere Möglichkeit gibt...
Und für jede Plattform ne Implementation zu schreiben... nein... dazu hab ich dann doch keine Lust.... vor allem weil das ja nur ein "Spaß"-Projekt ist.

Trotzdem Danke!
Andreas
 
Zurück