java.io.StreamCorruptedException: encabezado de flujo no válido: 00000001

Sigo recibiendo esto, obtén estoException:

java.io.StreamCorruptedException: invalid stream header: 00000001

En el lado del servidor, utilicé esto para enviar y recibir int, funciona bien.

Servidor:

new DataOutputStream(player1.getOutputStream()).writeInt(P1);

Cliente:

dataFromServer = new DataInputStream(socket.getInputStream());
dataFromServer.readInt();

Pero cuando intento enviar un objeto, como este, da el error.

Servidor:

new ObjectOutputStream(player2.getOutputStream()).writeObject(gameCrossword);

Cliente:

objectFromServer = new ObjectInputStream(socket.getInputStream());
crossword = (Crossword)objectFromServer.readObject();

Cualquier ayuda sería buena. Aquí estoy yo enviando el crucigrama inicialmente antes de la sesión de juego

Cambié el código para usar solo flujos de objetos en lugar de flujos de datos, por consejo de jtahlborn

servidor

player1 = serverSocket.accept();

serverLog.append(new Date() + ": Player 1 joined session " + sessionNo + '\n');
serverLog.append("Player 1's IP address" + player1.getInetAddress().getHostAddress() + '\n');

new ObjectOutputStream(player1.getOutputStream()).writeInt(P1);
new ObjectOutputStream(player1.getOutputStream()).writeObject(gameCrossword);

player2 = serverSocket.accept();

serverLog.append(new Date() + ": Player 2 joined session " + sessionNo + '\n');

serverLog.append("Player 2's IP address" + player2.getInetAddress().getHostAddress() + '\n');

new ObjectOutputStream(player2.getOutputStream()).writeInt(P2);
new ObjectOutputStream(player2.getOutputStream()).writeObject(gameCrossword);

cliente

              private void connectToServer() {

    try {
        Socket socket = new Socket(host, 8000);
        objectFromServer = new ObjectInputStream(socket.getInputStream());
        objectToServer = new ObjectOutputStream(socket.getOutputStream());

    } catch (IOException ex) {
        System.err.println(ex);
    }

    Thread thread = new Thread(this);
    thread.start();
}

@Override
public void run() {

    try {
        player = objectFromServer.readInt();
        crossword = (Crossword)objectFromServer.readObject();
        System.out.println(crossword);

Saludos, C.

Respuestas a la pregunta(1)

Su respuesta a la pregunta