Lea continuamente objetos de un ObjectInputStream en Java

Tengo un problema al usar un ObjectInputStream y he estado luchando con él durante 2 días. Traté de buscar una solución pero desafortunadamente no encontré una respuesta adecuada.

Estoy tratando de escribir una aplicación cliente / servidor en la que el cliente envía objetos (en este caso, una clase de configuración) al servidor. La idea es que la conexión se mantenga viva después de enviar el objeto, por lo que es posible enviar un nuevo objeto si es necesario.

Aquí están las partes importantes de mi código de cliente:

mSocket = new Socket("192.168.43.56", 1234);

mObjectIn = new ObjectInputStream(mSocket.getInputStream());
mObjectOut = new ObjectOutputStream(mSocket.getOutputStream());

mObjectOut.writeObject(stubConfig);
mObjectOut.flush();

En el código anterior, omití algunos bloques try / catch para mantener el código legible para usted.

El lado del servidor tiene el siguiente aspecto:

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(); 
}

Lo que quiero lograr es que mientras la conexión de socket esté activa, el servidor esté escuchando los objetos de configuración entrantes.

Sin embargo, cuando ejecuto mi programa, recibí una EOFException en el bucle while del lado del servidor. Recibo el primer objeto de configuración sin ningún problema en la primera iteración del ciclo while, pero después de eso obtengo una EOFException cada vez que se llama a readObject ().

Estoy buscando una manera de resolver esto. ¿Alguien puede ponerme en la buena dirección?

EDITAR: Lo que leí sobre la EOFException es que se lanza cuando desea leer desde una secuencia cuando se alcanza el final. Eso significa que, por alguna razón, la secuencia finalizó después de que se envió el objeto. ¿Hay alguna manera de reiniciar las transmisiones?

Respuestas a la pregunta(3)

Su respuesta a la pregunta