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.