DataInputStream 从套接字打印未知字符

DataInputStream printing unknown character from a socket

我在使用 DataInputStream 从套接字读取时收到一个未知字符。当我在服务器端发送“Hello”时,输出是“Hello”,未知字符就是问题所在。我是套接字编程的新手,所以我不知道问题出在哪里。我也尝试使用 BufferReaderPrintWriter,但服务器在使用 readLine() 时不打印发送的文本,而是打印 java.io.BufferedReader.

服务器端:

//BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
DataInputStream is= new DataInputStream(socket.getInputStream());
String userinput= is.readLine();
System.out.println("Client message: "+userinput);

客户端:

//BufferedReader std= new BufferedReader(new InputStreamReader(System.in));
String userInput;
DataOutputStream out;
while((userInput=std.readLine()) !=null){
    Socket socketClient= new Socket("localhost",5000);
    OutputStream os= socketClient.getOutputStream();
    out=new DataOutputStream(os);
    out.writeUTF(userInput);
    out.flush();
    socketClient.close();
}

您在客户端使用 writeUTF,您确定服务器端的 readLine 与其兼容吗?我以前从未见过,但 javadoc 提到它是 "modified" UTF-8 encoding。尝试使用 readUTF,或者简单地使用常规的 write 方法。

如果您读取 UTF 行,则可以写入 UTF 或 ASCII 字符,但如果您读取 ASCII 字符,则必须将这些字符写入 ASCII。 尝试使用 out.write(userInput); 而不是 out.writeUTF(userInput);