Search code examples
javadatainputstream

Read byte[] from server


I am trying to read byte[] that is being send from a client to a server.

This is my client code...

 din = new DataInputStream(socket.getInputStream());
 dout = new DataOutputStream(socket.getOutputStream());

 Cipher cipher = Cipher.getInstance("RSA"); 
 // encrypt the aeskey using the public key 
 cipher.init(Cipher.ENCRYPT_MODE, pk);

 byte[] cipherText = cipher.doFinal(aesKey.getEncoded());
 dout.write(cipherText);

And this is my server code...

 DataInputStream dis = new DataInputStream(socket.getInputStream());          
 DataOutputStream dos = new DataOutputStream(socket.getOutputStream());

 String chiper = dis.readUTF();
 System.out.println(chiper);

However, the dis.readUTF(); line fails with an exception...

java.io.EOFException at java.io.DataInputStream.readFully(DataInputStream.java:197)
    at java.io.DataInputStream.readUTF(DataInputStream.java:609)
    at java.io.DataInputStream.readUTF(DataInputStream.java:564)
    at gameserver.ClientHandler.run(GameServer.java:65)

Could someone please help me understand why this doesn't work.


Solution

  • For starters, if you write a sequence of (encrypted!) bytes at one end, and trying to read a UTF-formatted string at the other end...you're going to have a bad time.

    I'd suggest that on the client side you should do something like

    dout.writeInt(cipherText.length);
    dout.write(cipherText);
    

    and then on the server side you should do something like

    int byteLength = dis.readInt(); // now I know how many bytes to read
    byte[] theBytes = new byte[byteLength];
    dis.readFully(theBytes);