# ArrayList über Netzwerk senden!



## TimSkyp (10. Jan 2012)

Hallo, 

Ich bin dabei ein Netzwerkspiel zu programmieren. Ich bin bisweilen so weit, dass man es alleine am Computer spielen kann. 

Mein Problem ist jetzt dass ich eine ArrayList mit Objekten über das Netzwerk an alle verbundenen Clients schicken will. Ich vermute dass ich den ObjectInputStream zum einlesen und den ObjectOutputStrem zum auslesen verwenden muss.
Ich hab aber nicht den geringsten Schimmer wie ich es hinbekomme das das Array gesendet wird.
Ich hab zwar schon mal einen Chat programmiert, aber da werden nur Textnachrichten hin und her geschickt.

Weiß jemand ich ich am besten anfange???


----------



## HoaX (10. Jan 2012)

ArrayList ist eigentlich serialisierbar. D.h. du musst schon genauer werden was nicht geht, evtl. auch den betreffenden Ausschnitt aus dem Code zeigen.
Ich vermute einfach mal dass deine Objekte in der Liste nicht das Interface Serializable implementieren.


----------



## TimSkyp (11. Jan 2012)

Wobei ich mich nicht auskenne ist wie ich es genau anstellen muss um meine Objekte zu verschicken.
Soll ich alle zuerst mit einem FileInputStream in eine File schreiben, dass ich dann auslese?
Oder gibt es bessere Möglichkeiten?

Was ich zuerst ausprobiert habe war das (Aber dabei hängt sich mein Programm auf): 


```
Socket conn = new Socket(server, port);

ObjectInputStream oin = new ObjectInputStream(conn.getInputStream());
ObjectOutputStream oout = new ObjectOutputStream(conn.getOutputStream());
```


----------



## SlaterB (11. Jan 2012)

> Soll ich alle zuerst mit einem FileInputStream in eine File schreiben, dass ich dann auslese?
schau dir doch Beispiele an, geht auch direkt 

> Aber dabei hängt sich mein Programm auf
wenn du erst den ObjectInputStream erstellst, will dieser bereits im Konstruktor ein Start-Token lesen,
auf der anderen Seite wahrscheinlich genauso, aber niemand sendet was, Deadlock,

etwas ungünstig von diesen Klassen, ein häufiger Fehler,
du musst mindestens auf einer Seite, besser generell immer auf beiden Seiten für beliebige Streams 
erst den Output initialisieren, dann den Input, also nur die Zeilen vertauschen..


----------



## TimSkyp (11. Jan 2012)

Ich bin im Moment dabei meine ArrayList in ein File einzulesen.
Wenn ich es jedoch auslesen will 


```
pieces = (ArrayList<Piece>) oin.readObject();
```

bekomm ich folgende Exception:


```
java.io.EOFException
	at java.io.ObjectInputStream$BlockDataInputStream.peekByte(ObjectInputStream.java:2553)
	at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1296)
	at java.io.ObjectInputStream.readObject(ObjectInputStream.java:350)
```

Was bedeutet das genau??


----------



## Michael... (11. Jan 2012)

Warum schreibst Du die List überhaupt in eine Datei, wenn Du diese ohnehin über Netzwerk verschicken willst?

Die EOF Exception kommt vermutlich weil der Stream auf die Datei noch offen ist. Wenn man Streams nicht mehr benötigt diese am besten gleich mit close() beenden.


----------

