# invalid stream header



## CyD (26. Okt 2007)

Hi Leutz!

Der Sinn des Programmes ist schnell erklärt:
Der Server schickt dem Client eine Reihe von Objekten, die dieser Auswertet.

So weit so gut, aber ich bekomm immer diese Fehlermeldung:

```
java.io.StreamCorruptedException: invalid stream header: 64652E63
	at java.io.ObjectInputStream.readStreamHeader(Unknown Source)
	at java.io.ObjectInputStream.<init>(Unknown Source)
	at Client.start(Client.java:63)
```

Hier der Code vom Client:

```
// Client

public Socket clientSocket = new Socket("localhost", 12345);
// ZEILE 62
public ObjectInputStream inputStream = new ObjectInputStream(this.clientSocket.getInputStream());
// ZEILE 64
public PrintWriter outputStream = new PrintWriter(this.clientSocket.getOutputStream(), true);

Object inputLine = null;
while ((inputLine = this.inputStream.readObject()) != null) {
	this.doSomething(inputLine); // Hier wird das Object weiterverarbeitet...
	this.outputStream.println("NEXT");
}
```

Gibt es vielleicht Alternativen für 'ObjectInputStream'?
Normalerweise benutze ich 

```
String java.io.BufferedReader.readLine()
```
aber ein String, der ein "byte[]" enthält...

Hier der Code vom Server: 
Macht zwar keine Probleme, aber vielleicht hilfts euch weiter.

```
// Server

public ServerSocket serverSocket = new ServerSocket(12345);	
public Socket clientSocket = this.serverSocket.accept();
	
public PrintWriter outputStream = new PrintWriter(this.clientSocket.getOutputStream(), true);
public BufferedReader inputStream = new BufferedReader( new InputStreamReader( this.clientSocket.getInputStream() ));


InputStream fileIn = new FileInputStream(src);

byte[] buf = new byte[1024];
int len;
while ((len = FileIn.read(buf)) > 0) {
	this.outputStream.println(new Protocol());
	if (!this.inputStream.readLine().equals("NEXT")) { // Wartet auf Antwort vom Client
		break;
	}
}
fileIn.close();
```

Code von dem zu übertragenen Objekt:

```
public class Protocol extends Object {
	
	private String information = "";
	private byte[] data;


	public FluxProtocol() {}


	public byte[] getData() {
		return data;
	}
	public String getInformation() {
		return information;
	}

	public void setData(byte[] data) {
		this.data = data;
	}
	public void setInformation(String information) {
		this.information = information;
	}
}
```

Liegts am Stream, am Socket oder eher an dem Object "Protocol"?
Hat irgendjemand eine Lösung für mein Problem??

THX im voraus!

CyD


----------



## CyD (26. Okt 2007)

Hab was vergessen:

Client.java

```
public void run() {
		
	boolean connected = false;
		
	try {
		do {
			try {
				this.clientSocket = new Socket(localhost, 12345);
				connected = true;
			} catch (Exception e) {
				System.out.println("Unbekannter Host: "+this.host);
			}

		} while (connected == false);

	        this.outputStream = new PrintWriter(this.clientSocket.getOutputStream(), true);
	        this.inputStream = new ObjectInputStream(this.clientSocket.getInputStream()); // ZEILE 63

	        this.receiveData();

	} catch (Exception e) {
		e.printStackTrace();
	}
}
```

Vielleicht liegts an "clientSocket", welches welches in einer do-while-schleife 
initialisiert wird. 
Wenn ja, gibts eine bessere Lösung?


----------



## Murray (26. Okt 2007)

Ohne deinen Code jetzt vollständig verstanden zu haben: was per ObjectInputStream gelesen werden soll, muss auch mit einem ObjectOutputStream geschrieben worden sein.


----------

