Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java DataInputStream从套接字打印未知字符_Java_Printwriter_Datainputstream_Inputstreamreader - Fatal编程技术网

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
:我来看看。如果我想发送一个字符串,哪个选项最有效?如果你使用的是缓冲输入流,它应该适合大多数用途。网上有很多这样的例子