Streams: merkwürdiges Verhalten

Status
Nicht offen für weitere Antworten.

alshir

Mitglied
Auszug aus Server:
Code:
InputStream in = client.getInputStream();
         BufferedInputStream bis = new BufferedInputStream( in );
         BufferedOutputStream bos = new BufferedOutputStream( new FileOutputStream( file ) );

         byte[] buffer = new byte[1024];
         int readbytes = 0;
         int receivebytes = 0;
         
         System.out.println( "Empfange Datei" );
         while( ( readbytes = bis.read( buffer ) ) != -1 ) {
            bos.write( buffer, 0, readbytes );
            receivebytes += readbytes;
         }
         System.out.println(receivebytes + " aus dem BufferedInputStream gelesen");

Ausgabe: 56512512 aus dem Stream gelesen

Auszug aus Client:
Code:
OutputStream out = server.getOutputStream();
         BufferedOutputStream bos = new BufferedOutputStream( out );
         BufferedInputStream bis = new BufferedInputStream( new FileInputStream( file ) );

         byte[] buffer = new byte[1024];
         int readbytes = 0;
         long sendbytes = 0;
         
         System.out.println( "Beginne Filetransfer" );
         while( ( readbytes = bis.read( buffer ) ) != -1 ) {
            bos.write( buffer, 0, readbytes );
            sendbytes += readbytes;
         }
         System.out.println(sendbytes + " in den BufferedOutputStream geschrieben");
Ausgabe:56512858 in den Stream geschrieben

Kann mir einer sagen, warum ich auf dem Weg von einem zum andern Stream - das ganze kommuniziert über Sockets - 346 Bytes verliere ???

mfg
alshir
 

alshir

Mitglied
Habe danach ge-flush-t, aber es hat nichts verändert. Weder ein bos.flush IN noch NACH der Schleife. Auch beide zusammen haben nicht geholfen.

EDIT: Ach der flush() im Client hat gefehlt. Habe den Fehler immer im Server gesucht, da der Client ja offensichtlich richtig arbeitete ... was aber nicht so war. Jetzt gehts.

Thx 4 help

mfg
alshir
 
G

Guest

Gast
Nur mal so als Anmerkung (nicht direkt zum Thema).
Bei DeflaterOutputStream (GZIP etc.) muss man die Ausgabe,
anders als bei anderen Streams, mit finish() abschliessen.
 

alshir

Mitglied
Mir ist da noch eine Merkwürdigkeit aufgefallen.

Wenn ich das Programm mit GUI ausführe, funktioniert es einwandfrei, solange ich nur eine Datei übertrage.
Sobald ich allerdings die zweite Datei in dem immernoch offenen Programm verschicken will, hat er noch Datenmüll im Stream, der sich dann folgendermaßen äussert: Der empfangene long ist: "8316300705153444352"
Anscheinend reichen die folgenden Befehle nicht aus, um einen Stream und/oder Socket sauber zu schliessen:
Code:
bis.close();
bos.close();
br.close();
dis.close();
serversocket.close();
client.close();

Das sind auch wirklich alle offenen Streams auf Serverseite. Auf Clientseite werden auch alle Streams und Sockets mithilfe des close Befehls geschlossen.

Achso es ist ausserdem noch zu sagen, dass wirklich alles geflusht wurde, was geflusht werden kann.

mfg
alshir
 
G

Guest

Gast
Erstellst Du serverseitig den Serversocket immer wieder neu oder wie?
Mach das serversocket.close(); weg.
Es sollte einmalig für die gesamte "Lebesdauer" der Servers geöffnet bleiben.
z.B.
Code:
public void run()
{
  ...
  Socket clientConnection = serversocket.asccept(); // auf eingehende Verbindungen lauschen
  launchConnectionHandler(clientConnection); // asynchron; nicht blockierend!
  ...
}

serversocket.close() nur beim Beenden des Servers und wenn kein ClientConnectionHandler-Thread
noch aktiv ist.
 

alshir

Mitglied
Natürlich schliesse ich den Server nach dem Empfang der Datei.
Schliesslich soll das Programm nur nach betätigen des "Receive File" Knopfs in den Empfangsmodus gehen, dass heisst einen offenen lauschenden Socket haben.

EDIT: Ich weiss ja nicht warum, aber im Moment scheint es zu gehen. Vielleicht lag das Problem daran, dass ich zu schnell nach dem Schliessen des Sockets wieder einen neuen aufgemacht habe.

mfg
alshir
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Streams - merkwürdiges Verhalten Allgemeine Java-Themen 2
8u3631984 Frage zu Java Streams min / max Allgemeine Java-Themen 17
Z Mit Java 8+ Streams Zeilen nummern zu Zeilen hinzufügen Allgemeine Java-Themen 17
F Streams als Alternative für dieses Problem ? Allgemeine Java-Themen 15
Monokuma Lesbarkeit von Streams Allgemeine Java-Themen 6
Monokuma Foreach Schleifen in Streams umändern Allgemeine Java-Themen 23
J Streams Allgemeine Java-Themen 6
LimDul Streams und Exception Allgemeine Java-Themen 8
LimDul Mittels Streams aus Strings A B C den String A, B und C machen Allgemeine Java-Themen 12
K Lesbarkeit von Streams Allgemeine Java-Themen 5
X Ermittlung eines doppelte Paars mit Streams Allgemeine Java-Themen 50
mihe7 Lesbarkeit von Streams Allgemeine Java-Themen 5
N Streams wann .filtern? Allgemeine Java-Themen 2
A Lambda und Streams verstehen Allgemeine Java-Themen 4
J IO Streams Allgemeine Java-Themen 13
M Wie funktionieren parallele Java Streams? Allgemeine Java-Themen 1
R Collections BiPredicate in Java 8 Streams Allgemeine Java-Themen 7
F Umgehen mit übergebenen Streams Allgemeine Java-Themen 3
hdi Überwachen des err-Streams? Allgemeine Java-Themen 8
N read streams umleiten Allgemeine Java-Themen 2
DEvent GZIP Streams und gzip Allgemeine Java-Themen 2
S Streams zusammenfügen Allgemeine Java-Themen 4
J Objekt in Datei speichern mittels Streams Allgemeine Java-Themen 6
F Double mit Streams aus Datei einlesen Allgemeine Java-Themen 3
C in Streams Allgemeine Java-Themen 4
M Sind Streams asynchron? Allgemeine Java-Themen 2
Saxony DOS Konsole und deren Streams Allgemeine Java-Themen 5
B Probleme mit Streams Allgemeine Java-Themen 5
T Zwei Streams verbinden Allgemeine Java-Themen 3
L Die Wahl des richtigen Streams? Allgemeine Java-Themen 3
G Video Streams mit Servlets Allgemeine Java-Themen 3
P Streams per Mail mit JavaMailAPI versenden Allgemeine Java-Themen 3
thE_29 Problem mit Streams Allgemeine Java-Themen 6
Thallius Merkwürdiges Verhalten von Swingworker.cancel() Allgemeine Java-Themen 2
T Merkwürdiges Thread-Verhalten Allgemeine Java-Themen 6
Tommy Nightmare Merkwürdiges Verhalten bei der Datenzuweisung Allgemeine Java-Themen 4
Thallius Swing Merkwürdiges Verhalten beim Panel Tausch Allgemeine Java-Themen 3
Thallius Merkwürdiges StringBuilder verhalten (Char Encoding) Allgemeine Java-Themen 6
V Merkwürdiges For-Loop Problem Allgemeine Java-Themen 7
P Applet-Zugriffsrechte: merkwürdiges Verhalten Allgemeine Java-Themen 4
R Merkwürdiges Verhalten der equals Method Allgemeine Java-Themen 4
M merkwürdiges Verhalten von JUnit4 Allgemeine Java-Themen 2
javamax2000 Sehr sonderbares Verhalten Allgemeine Java-Themen 6
kodela Unterschiedliches Verhalten von BufferedReader Allgemeine Java-Themen 3
J Unvorhersehbares Verhalten - benutze ich die falsche Bedingungsprüfung oder brauche ich Threads? Allgemeine Java-Themen 12
N Best Practice Allgemeines Verhalten für ein Interface implementieren? Allgemeine Java-Themen 7
F JTable Pfeiltasten-Verhalten Allgemeine Java-Themen 1
W LocalDateTime Verhalten unerklärlich Allgemeine Java-Themen 1
C Unterschiedliches Verhalten Editor und deployte Application Allgemeine Java-Themen 3
S Threads ThreadPoolExecutor eigenartiges verhalten Allgemeine Java-Themen 5
A Java Verhalten bei parallelem Aufruf derselben Methode?? Allgemeine Java-Themen 2
M Threads Viele Aufrufe aus Thread, komisches Verhalten Allgemeine Java-Themen 8
S getChildAt() Verhalten Allgemeine Java-Themen 4
S Frage zu Threads (Sichtbarkeit und Verhalten) Allgemeine Java-Themen 11
1 Collections Generics, internes Verhalten Allgemeine Java-Themen 16
S Collections Unverständliches Verhalten... Allgemeine Java-Themen 4
M Nach Programmdurchlauf werden Zeichen falsch dargestellt + Anderes Verhalten unter Windows Allgemeine Java-Themen 6
C Komisches Verhalten zwischen Set und List bei contains Allgemeine Java-Themen 6
S (Doppel)Klick-Verhalten vom Desktop unter Java imitieren. Allgemeine Java-Themen 5
A Seltsames Verhalten von JUnit-Tests im Zusammenspiel mit Ant Allgemeine Java-Themen 6
S Verhalten von System.getenv() in Ubuntu / Linux Allgemeine Java-Themen 12
hdi Verhalten bei nicht behandelten Exceptions Allgemeine Java-Themen 2
J Rätselhaftes Verhalten von Collections Allgemeine Java-Themen 5
M Unerklärliches Verhalten bei Variableninitialisierung Allgemeine Java-Themen 11
S Verhalten der Klasse TreeSet... Allgemeine Java-Themen 4
S Jar und Exe verhalten sich unterschiedlich unter Vista Allgemeine Java-Themen 8
M Seltsames Verhalten eines StringReaders Allgemeine Java-Themen 2
spacegaier HeapSpace der VM ändern -> Verhalten von JARs und EXEs Allgemeine Java-Themen 10
M JList seltsames verhalten. Allgemeine Java-Themen 5
K Seltsames Verhalten von byte[] und Strings Allgemeine Java-Themen 6
S Seltsames Verhalten von split() Allgemeine Java-Themen 3
K Überschreiben von 'static'-Methoden hat anderes Verhalten? Allgemeine Java-Themen 2

Ähnliche Java Themen


Oben