Hi Leute,
ich benutze die ObjectOutputStream Klasse, um zwischen Client und Server zu kommunizieren. Nun ist es wichtig, dass die Objecte permanent übertragen werden, damit der Client alle Änderungen an den Objekten sieht und umgekehrt, der Server auch.
Der Server schickt das erste Object, dann wartet er und schickt auf jede Antwort erneut seine aktuellen Daten. Der Client wartet von vornerein, dass der Server etwas schickt und sendet dann ebenfalls auf jede Antwort seine Daten.
Sollte eigentlich kontinuierlich laufen, tut es ohne reset auch wunderbar (nur das ich immer die gleichen Objekte bekomme). Wenn ich reset benutze funktioniert die Übertragung nur einige Sekunden und bleibt dann hängen im Schreibvorgang auf der anderen Seite hängen.
Hier mal der Auszug meiner eigentlich unendlichen Schleife:
Danke im Voraus
Scarabol
ich benutze die ObjectOutputStream Klasse, um zwischen Client und Server zu kommunizieren. Nun ist es wichtig, dass die Objecte permanent übertragen werden, damit der Client alle Änderungen an den Objekten sieht und umgekehrt, der Server auch.
Der Server schickt das erste Object, dann wartet er und schickt auf jede Antwort erneut seine aktuellen Daten. Der Client wartet von vornerein, dass der Server etwas schickt und sendet dann ebenfalls auf jede Antwort seine Daten.
Sollte eigentlich kontinuierlich laufen, tut es ohne reset auch wunderbar (nur das ich immer die gleichen Objekte bekomme). Wenn ich reset benutze funktioniert die Übertragung nur einige Sekunden und bleibt dann hängen im Schreibvorgang auf der anderen Seite hängen.
Hier mal der Auszug meiner eigentlich unendlichen Schleife:
Java:
while (!Thread.interrupted()) {
Object obj = null;
try {
// reset here? reset input too?
obj = socketInp.readObject();
} catch (SocketException e) {
// may be socket closed - just quit silent
break;
} catch (IOException e) {
e.printStackTrace();
break;
} catch (ClassNotFoundException e) {
e.printStackTrace();
break;
}
if (obj != null && obj instanceof Entity) {
Entity gameObj = (Entity) obj;
// yeah we got a message, add it to our buffer
lockIn.lock();
bufferIn.put(gameObj.getID(), gameObj);
System.out.println(this.getClass().getName()+" received "+gameObj.getClass().getName());
lockIn.unlock();
}
// nothing to say? - wait
while (bufferOut.isEmpty()) {
try {
Thread.sleep(0, 1);
} catch (InterruptedException e) {
this.close();
return;
}
}
try {
// reset here???
// so we got a message send back our cached data
lockOut.lock();
for (Entity e : bufferOut.values()) {
socketOut.writeObject(e); // <<<< genau hier bleibt der Ablauf hängen
}
socketOut.flush();
System.out.println(this.getClass().getName()+" send: "+bufferOut.size());
bufferOut.clear();
// reset here???
} catch (IOException e) {
e.printStackTrace();
break;
} finally {
lockOut.unlock();
}
}
this.close();
Danke im Voraus
Scarabol