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)
有人可以帮助我理解为什么这不起作用。
对于初学者来说,如果您在一端写入一系列(加密!)字节,并尝试在另一端读取 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)