java.io.StreamCorruptedException: nagłówek niepoprawnego strumienia: 00000001

Ciągle to dostajęException:

java.io.StreamCorruptedException: invalid stream header: 00000001

Po stronie serwera użyłem tego do wysyłania i odbierania int, działa dobrze.

Serwer:

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

Klient:

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

Ale kiedy próbuję wysłać obiekt, tak jak ten, daje błąd.

Serwer:

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

Klient:

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

Każda pomoc byłaby dobra. Tutaj wysyłam krzyżówkę początkowo przed sesją gry

Zmieniłem kod, aby używać tylko strumieni obiektów, a nie strumieni danych, za radą jtahlborn

serwer

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

klient

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

pozdrowienia, C.

questionAnswers(1)

yourAnswerToTheQuestion