有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

(Java)通过socket发送和映像时出错:Java。木卫一。StreamCorruptedException:无效类型代码:3B

我正在制作一个轰炸机游戏,它需要在局域网中工作。我需要从一个客户端(游戏)向服务器发送一个图像、2个整数和一个对象,然后返回到另一个客户端(另一个游戏)。现在我只是想把所有这些东西都发送到一个游戏中,发送到服务器,然后返回到游戏中。当我第二次尝试发送图像时,我遇到了问题。这是我的服务器部件代码:

public class Server {
//Atributes....................................
private ServerSocket serverSocket = null;   
private Socket socket = null;

public boolean conected = false;

 private ObjectInputStream Mensajeinput = null;
 private ObjectOutputStream Mensajeoutput = null;

 private DataInputStream BomberInput = null;
 private DataOutputStream BomberOutput = null;
//.............................................

 int X, Y;
 BufferedImage CurrentSprite;

public static void main(String[] args) throws Exception {
   Server Servidor = new Server();

   Servidor.run();
}

public void run() throws Exception{

        serverSocket = new ServerSocket(208);     

        socket = serverSocket.accept();  


        conected=true;                                       
        Mensaje Actualization= null;                 

        while ( conected ){

            //=====initialize all the input and output Streams================================

              BomberInput = new DataInputStream(socket.getInputStream());
              BomberOutput = new DataOutputStream(socket.getOutputStream());

              Mensajeinput = new ObjectInputStream(socket.getInputStream());
              Mensajeoutput = new ObjectOutputStream(socket.getOutputStream());

              //=====receive and send the ints ============

              X = (int) BomberInput.readInt();
              BomberOutput.writeInt(X);
              BomberOutput.flush();

              Y = (int) BomberInput.readInt();
              BomberOutput.writeInt(Y);
              BomberOutput.flush();


            //=========receieve and send the image===================== 
              CurrentSprite = (BufferedImage) ImageIO.read(BomberInput);
              ImageIO.write(CurrentSprite, "GIF", BomberOutput);

            //==========receive the object=================

              Actualization= (Mensaje) Mensajeinput.readObject();        

        }
        //====Close socket===============================
        socket.close();

  }
}

这是游戏代码的客户端部分:

  M = new Mensaje(0 , 0 , 0, 0);

                if (b1.isAlive()) controlPj.MoverPj(b1, M);


 //*****************************INTERACTION WITH THE SERVER*****************************                    
               //=====Initialize inputs and outputs=======

                 BomberOutput = new DataOutputStream(Sock.getOutputStream());
                 BomberInput = new DataInputStream(Sock.getInputStream());

                 MensajeOutput = new ObjectOutputStream(Sock.getOutputStream());
                 MensajeInput = new ObjectInputStream(Sock.getInputStream());

                //=====Sends and receive the ints =======  
                 BomberOutput.writeInt(b1.x);
                 X = BomberInput.readInt();
                 BomberOutput.flush();


                 BomberOutput.writeInt(b1.y);
                 Y = BomberInput.readInt();
                 BomberOutput.flush();

                 //======Sends and receive the image=======

                     ImageIO.write(b1.Current, "GIF",  BomberOutput );
                     EnemmySprite = (BufferedImage) ImageIO.read(BomberInput);

                 //======================Sends the object==================

                   MensajeOutput.writeObject(M);
                   MensajeOutput.flush();

                  System.out.println("Matriz Actualizada Recibida");
               //==========================================================================

//***********************************************************************************************************************          

除图像部分外,所有工作正常。客户端发送映像,服务器接收映像,然后重新发送映像,客户端接收映像。但随后它抛出了这个错误:

  Exception in thread "main" java.io.StreamCorruptedException: invalid type code: 3B
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1379)
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:371)
    at bomberman2.Server.run(Server.java:90)
    at bomberman2.Server.main(Server.java:42)

发生错误的特定行位于

   Actualization= (Mensaje) Mensajeinput.readObject(); 

你知道为什么会发生这种错误吗?谢谢你的帮助


共 (0) 个答案