Hey!
Sitze an einer Programmieraufgabe für die Uni. Es geht um ein Kartenspiel. Um Fehlern direkt aus dem Weg zu gehen wollte ich direkt ein Objekt übertragen, welches die Karten enthält. Das funktionierte in meiner ersten Variante auch, jedoch sagten meine Gruppenleiter, dass es ein eher bescheidener Code ist (ich habe jedem Clienten einen Port zugeordnet).
Jetzt habe ich es neu geschrieben, es funktioniert nur leider nicht mehr. Vielleicht könnt ihr mir einen Tipp geben?
Ausschnitt Client:
Ausschnitt Server:
An dieser Stelle gibt's immer einen Fehler.
Der Grund liegt wohl einfach darin, das ois.readObject() nicht darauf wartet, dass wirklich ein Objekt vorliegt. In meiner ersten Variante habe ich für jede Übertragung eine neue Verbindung aufgebaut, so dass ich immer das blockierende socket.accept() nutzen konnte.
Jemand eine Idee, wie ich den Code doch noch auf die Sprünge helfen kann?
Edit: Habe selbst gerade eine Idee gehabt: Wenn ich einen das serialisierte Objekt per readLine() empfange, habe ich eine blockierende Methode. Ich muesste also nur an die Serialisierung ein New-Line anhaengen und dann wieder entfernen? Ist das brauchbar?
Sitze an einer Programmieraufgabe für die Uni. Es geht um ein Kartenspiel. Um Fehlern direkt aus dem Weg zu gehen wollte ich direkt ein Objekt übertragen, welches die Karten enthält. Das funktionierte in meiner ersten Variante auch, jedoch sagten meine Gruppenleiter, dass es ein eher bescheidener Code ist (ich habe jedem Clienten einen Port zugeordnet).
Jetzt habe ich es neu geschrieben, es funktioniert nur leider nicht mehr. Vielleicht könnt ihr mir einen Tipp geben?
Ausschnitt Client:
Java:
socket = new Socket(Config.IP, Config.INITIAL_PORT);
oos = new ObjectOutputStream(socket.getOutputStream());
oos.writeObject((SpielerDaten)this);
oos.flush();
oos.close();
Ausschnitt Server:
Java:
ois = new ObjectInputStream(client.getInputStream());
CL_Object clobject = null;
clobject = (CL_Object)ois.readObject();
An dieser Stelle gibt's immer einen Fehler.
Der Grund liegt wohl einfach darin, das ois.readObject() nicht darauf wartet, dass wirklich ein Objekt vorliegt. In meiner ersten Variante habe ich für jede Übertragung eine neue Verbindung aufgebaut, so dass ich immer das blockierende socket.accept() nutzen konnte.
Jemand eine Idee, wie ich den Code doch noch auf die Sprünge helfen kann?
Edit: Habe selbst gerade eine Idee gehabt: Wenn ich einen das serialisierte Objekt per readLine() empfange, habe ich eine blockierende Methode. Ich muesste also nur an die Serialisierung ein New-Line anhaengen und dann wieder entfernen? Ist das brauchbar?
Zuletzt bearbeitet: