从服务器读取字节[]

hkg*_*ile 0 java datainputstream

我正在尝试读取byte[]从客户端发送到服务器的内容。

这是我的客户端代码...

 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);
Run Code Online (Sandbox Code Playgroud)

这是我的服务器代码...

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

 String chiper = dis.readUTF();
 System.out.println(chiper);
Run Code Online (Sandbox Code Playgroud)

但是,该dis.readUTF();行失败但有异常...

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)
Run Code Online (Sandbox Code Playgroud)

有人可以帮助我理解为什么这不起作用。

Lou*_*man 5

对于初学者来说,如果您在一端写入一系列(加密!)字节,并尝试在另一端读取 UTF 格式的字符串……您将度过一段糟糕的时光。

我建议在客户端你应该做类似的事情

dout.writeInt(cipherText.length);
dout.write(cipherText);
Run Code Online (Sandbox Code Playgroud)

然后在服务器端你应该做类似的事情

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