Streams - merkwürdiges Verhalten

Status
Nicht offen für weitere Antworten.

alshir

Mitglied
Hallo zusammen,

also ich habe ein Stream Problem, welches ich hier einmal zur genaueren Eingrenzung dessen ein wenig vereinfacht und mit println´s aufbereitet habe.

Ausgabe ohne unten auskommentierten Code:

Client - Socket

Client - Socket

Öffne Socket
Socket zu 192.168.0.10:10024 geöffnet
Erstelle Outputstream out
Outputstream out ertellt
Erstelle BufferedWriter bw
BufferedWriter bw erstellt
Schreibe "idea-4.0.3.exe" in bw
Schreiben von "idea-4.0.3.exe" abgeschlossen
Schliesse alle offenen Streams und Verbindungen
Erledigt


Server - Socket

SeverSocket öffnen
ServerSocket geöffnet
Warte auf Client
Client gefunden
Erstelle Inputstream in
Inputstream in erstellt
Erstelle BufferedReader br
BufferedReader br erstellt
Lese eine Zeile
Zeile: "idea-4.0.3.exe" gelesen
Schliesse alle offenen Streams und Verbindungen
Erledigt


Ausgabe mit unten auskommentiertem Code:

Client - Socket

Öffne Socket
Socket zu 192.168.0.10:10024 geöffnet
Erstelle Outputstream out
Outputstream out ertellt
Erstelle BufferedWriter bw
BufferedWriter bw erstellt
Schreibe "idea-4.0.3.exe" in bw
Schreiben von "idea-4.0.3.exe" abgeschlossen
Erstelle DataOutputstream dos
DataOutputstream dos ertellt
Schreibe einen Long
Long :56512858 geschrieben
Schliesse alle offenen Streams und Verbindungen
Erledigt

Server - Socket

SeverSocket öffnen
ServerSocket geöffnet
Warte auf Client
Client gefunden
Erstelle Inputstream in
Inputstream in erstellt
Erstelle BufferedReader br
BufferedReader br erstellt
Lese eine Zeile
Fehler beim lesen des longs: java.io.EOFException
Zeile: "(nicht kopierbarer Datenschrott)" + "^QZ" gelesen
Lese einen Long
Schliesse alle offenen Streams und Verbindungen
Erledigt



Wer kann mir sagen, warum ich nach einem String keinen Long in den Datenstrom schreiben kann ???

EDIT: Diese Problem entsteht wie ich mit ein paar Tests herausgefunden habe genau dann, wenn ich verschiedene Streams hintereinanderschreiben lasse.

Dies ist aber dringend nötig für die Anwendung, welche ich schreibe, da ich da erst einen Dateinamen mittels PrintWriter, dann eine Dateigrösse als Long mittels eines DataOutputStreams, um dann die betreffende Datei mittels eines FileutputStreams hinterherzuschicken.


mfg
alshir

Der Code:
Code:
public class SendSocket {

   public static void main( String[] args ) {
      try {
         System.out.println( "Client - Socket" );
         System.out.println( "" );

         System.out.println( "Öffne Socket" );
         Socket server = new Socket( InetAddress.getByName( "192.168.0.10" ), 10024 );
         System.out.println( "Socket zu 192.168.0.10:10024 geöffnet" );

         System.out.println( "Erstelle Outputstream out" );
         BufferedOutputStream out = new BufferedOutputStream( server.getOutputStream() );
         System.out.println( "Outputstream out ertellt" );

         System.out.println( "Erstelle BufferedWriter bw" );
         BufferedWriter bw = new BufferedWriter( new OutputStreamWriter( out ) );
         System.out.println( "BufferedWriter bw erstellt" );

         String tempstring = new String( "idea-4.0.3.exe" );
         System.out.println( "Schreibe \"" + tempstring + "\" in bw" );
         bw.write( tempstring );
         bw.newLine();
         System.out.println( "Schreiben von \"" + tempstring + "\" abgeschlossen" );

         /*System.out.println( "Erstelle DataOutputstream dos" );
         DataOutputStream dos = new DataOutputStream( out );
         System.out.println( "DataOutputstream dos ertellt" );

         long templong = 56512858;
         System.out.println( "Schreibe einen Long" );
         dos.writeLong( templong );
         System.out.println( "Long :" + templong + " geschrieben" );
         */
         
         System.out.println( "Schliesse alle offenen Streams und Verbindungen" );
         // dos.close();
         bw.close();
         out.close();
         server.close();
         System.out.println( "Erledigt" );
      } catch( Exception e ) {
         System.err.println( "Clientsocket - Error: " + e );
      }
   }
}


Code:
public class ReceiveSocket {

   public static void main( String[] args ) {
      try {
         System.out.println( "Client - Socket" );
         System.out.println( "" );

         System.out.println( "SeverSocket öffnen" );
         ServerSocket server = new ServerSocket( 10024 );
         System.out.println( "ServerSocket geöffnet" );

         server.setSoTimeout( 30000 );

         System.out.println( "Warte auf Client" );
         Socket client = server.accept();
         System.out.println( "Client gefunden" );

         System.out.println( "Erstelle Inputstream in" );
         BufferedInputStream in = new BufferedInputStream( client.getInputStream() );
         System.out.println( "Inputstream in erstellt" );

         System.out.println( "Erstelle BufferedReader br" );
         BufferedReader br = new BufferedReader( new InputStreamReader( client
               .getInputStream() ) );
         System.out.println( "BufferedReader br erstellt" );

         try {
            System.out.println( "Lese eine Zeile" );
            String tempstring = br.readLine();
            System.out.println( "Zeile: \"" + tempstring + "\" gelesen" );
         } catch( Exception e ) {
            System.err.println( "Fehler beim lesen des Strings: " + e );
         }

         /*try {
            System.out.println( "Lese einen Long" );
            long templong = new DataInputStream( in ).readLong();
            System.out.println( "Long :" + templong + " gelesen" );
         } catch( Exception e ) {
            System.err.println( "Fehler beim lesen des longs: " + e );
         }*/

         System.out.println( "Schliesse alle offenen Streams und Verbindungen" );
         br.close();
         in.close();
         server.close();
         System.out.println( "Erledigt" );
      } catch( Exception e ) {
         System.err.println( "ServerSocket - Error" + e );
      }
   }
}
 

alshir

Mitglied
Code:
public class SendSocket {

   public static void main( String[] args ) {
      try {
         Socket server = new Socket( InetAddress.getByName( "192.168.0.10" ), 10024 );
         
         BufferedOutputStream out = new BufferedOutputStream( server.getOutputStream() );
         PrintWriter pw = new PrintWriter( new OutputStreamWriter( [color=red]out[/color] ) ); // Änderung

         // Schreibe String
         String tempstring = new String( "idea-4.0.3.exe" );
         pw.write( tempstring + "\n" );
         [color=red]pw.flush();[/color] // Änderung
         
         // Schreibe long
         DataOutputStream dos = new DataOutputStream( [color=red]out[/color] ); // Änderung

         long templong = 56512858;
         dos.writeLong( templong );
         [color=red]dos.flush();[/color] // Änderung

         pw.close();
         dos.close();
         out.close();
         server.close();
      } catch( Exception e ) {
         System.err.println( "Clientsocket - Error: " + e );
      }
   }
}

Die roten Sachen habe ich geändert, und dann ging es plötzlich.

Ich kann mir allerdings nicht genau erklären warum. Wenn mir das jetzt noch jemand sagt, bin ich echter Streamprofi :D

EDIT: Na das mit dem Rot hat ja super geklappt ... nicht. Hab jetzt an den drei Stellen Änderung drangeschrieben.

mfg
alshir
 
G

Guest

Gast
Du hast in Deiner ursprünglichen Version in einen BufferedWriter geschrieben.
Dieser puffert die Ausgabe ebenfalls. Dies führte dazu, dass der long Wert u.U.
vor dem String übertragen wurde.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Streams: merkwürdiges Verhalten Allgemeine Java-Themen 7
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

Neue Themen


Oben