# Problem mit ObjectInputStream beim lesen vom Socket



## YogaYoda (30. Nov 2009)

Hallo!

Ich habe einen kleinen Chat Client, der folgendermaßen Text von einem Socket lesen kann:


```
...
newSocket = new Socket(DEFAULT_HOST, DEFAULT_PORT);

inputScanner= new Scanner(new BufferedInputStream(newsocket.getInputStream()));
...
```

das funktioniert wunderbar, kann davon alles lesen.

Nun möchte ich ähnlich dazu auch Daten von einem Socket lesen können, vorgestellt hab ich mir das so: (kompiliert auch problemlos)


```
...
dataSocket = new Socket(DEFAULT_HOST, DEFAULT_PORT + 1);

dataScanner = new Scanner(new ObjectInputStream(dataSsocket.getInputStream()));
...
```

An dieser Stelle fällt allerdings eine IOException, und ich habe keine Ahnung was das Problem ist... sollte das so nicht funktionieren?


----------



## Marco13 (30. Nov 2009)

Was sagt denn die Exception?


----------



## FArt (30. Nov 2009)

Was ist der Scanner?


----------



## YogaYoda (30. Nov 2009)

Also die Exception:

```
java.io.StreamCorruptedException: invalid stream header: 3C636D64
	at java.io.ObjectInputStream.readStreamHeader(Unknown Source)
	at java.io.ObjectInputStream.<init>(Unknown Source)
```

Der Scanner... ein ganz normaler Java Scanner

```
import java.util.Scanner;
```


----------



## SlaterB (30. Nov 2009)

was sendet denn die Gegenseite?
wenn da nicht exakt ein korrekter ObjectOutputStream arbeitet, dann kann es nicht hinhauen,

Scanner über ObjectInputStream macht keinen Sinn


----------



## Marco13 (30. Nov 2009)

Wer füllt denn die Daten in den Stream? (Das sollte mit einem ObjectOutputStream gemacht werden!)


----------



## FArt (30. Nov 2009)

3C636D64

Nach ASCII-Code heißt das "<cmd"... ;-)


----------



## tuxedo (30. Nov 2009)

Seid ihr euch sicher dann man einen Scanner in Kombination mit den Object*Streams benutzen sollte?

"Scanner" ist für Texte gedacht, nicht aber für Binärdaten. Einfach mal den Scanner weglassen und den ObjectStream direkt auf den Stream des Sockets aufsetzen...

- Alex


----------



## SlaterB (30. Nov 2009)

> Seid ihr euch sicher dann man einen Scanner in Kombination mit den Object*Streams benutzen sollte?

es kamen doch schon zwei derartige Hinweise, wieso 'ihr euch'? (edit: tatsächlich nur einer von mir , 'wer sendet?' war schon doppelt)

und der Scanner ist gewiss nicht schuld, dass der ObjectInputStream in seinem Konstruktor meckert


----------



## tuxedo (30. Nov 2009)

SlaterB hat gesagt.:


> > Seid ihr euch sicher dann man einen Scanner in Kombination mit den Object*Streams benutzen sollte?
> 
> es kamen doch schon zwei derartige Hinweise, wieso 'ihr euch'?



Sorry, hatte das 



> Scanner über ObjectInputStream macht keinen Sinn



übersehen...



> und der Scanner ist gewiss nicht schuld, dass der ObjectInputStream in seinem Konstruktor meckert



Hmm, stimmt, der Scanner ist da in der Tat außen vor. Irgendwas scheint aber dennoch "dazwischen zu funken". Die Frage ist wer dieses "<cmd" sendet und vor allem warum.

- Alex


----------



## YogaYoda (30. Nov 2009)

So habe das Problem mittlerweile gelöst, ich hatte den socket client seitig erstellt bevor der server die verbindung auf diesem zuließ.

danke euch auf jeden fall für eure mühen


----------

