java.io.StreamCorruptedException: cabeçalho de fluxo inválido: 00000001
Eu continuo recebendo isso, pegue issoException
:
java.io.StreamCorruptedException: invalid stream header: 00000001
No lado do servidor, usei isso para enviar e receber int, funciona bem.
Servidor:
new DataOutputStream(player1.getOutputStream()).writeInt(P1);
Cliente:
dataFromServer = new DataInputStream(socket.getInputStream());
dataFromServer.readInt();
Mas quando tento enviar um objeto, como este, dá o erro.
Servidor:
new ObjectOutputStream(player2.getOutputStream()).writeObject(gameCrossword);
Cliente:
objectFromServer = new ObjectInputStream(socket.getInputStream());
crossword = (Crossword)objectFromServer.readObject();
Qualquer ajuda seria bem-vinda. Aqui estou eu enviando as palavras cruzadas inicialmente antes da sessão do jogo
Alterei o código para usar apenas fluxos de objetos em vez de fluxos de dados, seguindo o conselho 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);
Atenciosamente, C.