ontinuierliches Lesen von Objekten aus einem ObjectInputStream in Ja
Ich habe ein Problem bei der Verwendung eines ObjectInputStream und habe seit 2 Tagen damit zu kämpfen. Ich habe nach einer Lösung gesucht, aber leider keine passende Antwort gefunden.
Ich versuche, eine Client / Server-Anwendung zu schreiben, in der der Client Objekte (in diesem Fall eine Konfigurationsklasse) an den Server sendet. Die Idee ist, dass die Verbindung nach dem Senden des Objekts erhalten bleibt, sodass bei Bedarf ein neues Objekt gesendet werden kann.
Hier sind die wichtigen Teile meines Client-Codes:
mSocket = new Socket("192.168.43.56", 1234);
mObjectIn = new ObjectInputStream(mSocket.getInputStream());
mObjectOut = new ObjectOutputStream(mSocket.getOutputStream());
mObjectOut.writeObject(stubConfig);
mObjectOut.flush();
Im obigen Code habe ich einige Try / Catch-Blöcke weggelassen, damit der Code für Sie lesbar bleibt.
Die Serverseite sieht wie folgt aus:
mHostServer = new ServerSocket(port);
mSocket = mHostServer.accept();
// create streams in reverse oreder
mObjectOut = new ObjectOutputStream(mConnection.getOutputStream());
mObjectOut.flush();
mObjectIn = new ObjectInputStream(mConnection.getInputStream());
while (mIsSocketConnected)
{
StubConfig = (StubConfiguration)mObjectIn.readObject();
}
ch möchte erreichen, dass der Server, solange die Socket-Verbindung aktiv ist, auf eingehende Konfigurationsobjekte warte
Wenn ich mein Programm ausführe, erhalte ich eine EOFException in der while-Schleife auf der Serverseite. Ich erhalte das erste Konfigurationsobjekt problemlos in der ersten Iteration der while-Schleife, erhalte danach jedoch jedes Mal eine EOFException, wenn readObject () aufgerufen wird.
Ich suche nach einer Möglichkeit, dies zu lösen. Kann jemand mich in die gute Richtung bringen?
EDIT: Was ich über die EOFException gelesen habe, ist, dass sie ausgelöst wird, wenn Sie aus einem Stream lesen möchten, wenn das Ende erreicht ist. Das bedeutet, dass der Stream aus irgendeinem Grund beendet wurde, nachdem das Objekt gesendet wurde. Gibt es eine Möglichkeit, die Streams neu zu initialisieren oder so ??