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:
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 );
}
}
}