java.io.StreamCorruptedException: Ungültiger Stream-Header: 00000001

Ich bekomme das immer wiederException:

java.io.StreamCorruptedException: invalid stream header: 00000001

Serverseitig habe ich dies verwendet, um int zu senden und zu empfangen, funktioniert einwandfrei.

Server:

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

Klient:

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

Aber wenn ich versuche, ein Objekt wie dieses zu senden, wird der Fehler angezeigt.

Server:

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

Klient:

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

Jede Hilfe wäre gut. Hier sende ich das Kreuzworträtsel zunächst vor der Spielsitzung

Ich habe den Code geändert, um auf Anraten von Jtahlborn nur Objektströme anstelle von Datenströmen zu verwenden

Server

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

Grüße, C.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage