the than solucion received que occurred not maximum longer length has found español descargar decoderexception allowed java exception file-io multiplayer

than - java.io.StreamCorruptedException: cabecera de secuencia no válida: 00000001



java.io.ioexception que es (1)

no envuelva las secuencias de socket con más de una secuencia de entrada / salida. esto se romperá en todo tipo de malas maneras. en este caso específico, ObjectInputStream lee un encabezado de la secuencia en construcción , que está sucediendo antes de haber leído el int de la secuencia. independientemente, solo use un solo ObjectOutputStream y ObjectInputStream y elimine los flujos de datos (tenga en cuenta que ObjectOutputStream tiene un método writeInt ).

Sigo recibiendo esto, obtengo esta Exception :

java.io.StreamCorruptedException: invalid stream header: 00000001

El lado del servidor que usé 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, me 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 enviando el crucigrama inicialmente antes de la sesión del juego

Cambié el código para usar solo flujos de objetos en lugar de flujos de datos, siguiendo el 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.