Java DataInputStream从套接字打印未知字符
使用Java DataInputStream从套接字打印未知字符,java,printwriter,datainputstream,inputstreamreader,Java,Printwriter,Datainputstream,Inputstreamreader,使用DataInputStream从套接字读取时,我得到一个未知字符。当我在服务器端发送“Hello”时,输出是“Hello”,未知字符就是问题所在。我是套接字编程新手,所以我不知道会出现什么问题。我也尝试过使用BufferReader和PrintWriter,但在使用readLine()时,服务器不会打印发送的文本,而是打印java.io.BufferedReader 服务器端: //BufferedReader in = new BufferedReader(new InputStreamR
DataInputStream
从套接字读取时,我得到一个未知字符。当我在服务器端发送“Hello”时,输出是“Hello”,未知字符就是问题所在。我是套接字编程新手,所以我不知道会出现什么问题。我也尝试过使用BufferReader
和PrintWriter
,但在使用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提到这是一个很好的例子。尝试改用readUTF
,或者简单地使用常规的write
方法。如果读取UTF行,则可以写入UTF或ASCII字符,而不是读取ASCII字符,则必须将这些字符写入ASCII。
尝试使用out.write(用户输入)
而不是out.writeUTF(用户输入)
writeUTF()
不写一行,也不只是写字节。它先写一个长单词。请参阅Javadoc。如果使用writeUTF()
发送,则必须使用readUTF()
接收。没有“UTF行”这样的东西。我指的是一些字符,而不是由\n@user207421分隔的行。我只需要发送一个可以由多行组成的字符串并能够读取它。目前,这是我找到的解决方案。正如我所说,我试图使用BufferReader,但我无法在网上找到一个好的源代码,有没有更好的方法?我需要能够发送一个多行的字符串,我可以稍后解析。但是从套接字发送和读取数据我不确定什么是更好的解决方案。如果你想使用BufferedReader
或BufferedInputStream
非常简单,你可以调用这个构造函数来包装InputStream
:我来看看。如果我想发送一个字符串,哪个选项最有效?如果你使用的是缓冲输入流,它应该适合大多数用途。网上有很多这样的例子